Keşif İstemcisi Kanalını Kullanma
WCF istemci uygulaması yazarken, çağırdığınız hizmetin uç nokta adresini bilmeniz gerekir. Çoğu durumda bir hizmetin uç nokta adresi önceden bilinmez veya hizmetin adresi zaman içinde değişir. Bulma İstemci Kanalı bir WCF istemci uygulaması yazmanıza, çağırmak istediğiniz hizmeti açıklamanıza ve istemci kanalı otomatik olarak bir yoklama isteği göndermenize olanak tanır. Bir hizmet yanıtladığında, bulma istemci kanalı yoklama yanıtından hizmetin uç nokta adresini alır ve hizmeti çağırmak için kullanır.
Keşif İstemcisi Kanalını Kullanma
Bulma İstemci Kanalı'nı kullanmak için istemci kanalı yığınınıza öğesinin DiscoveryClientBindingElement bir örneğini ekleyin. Alternatif olarak, DiscoveryClientBindingElement ve öğesini kullanabilirsiniz DynamicEndpoint ve zaten yoksa bağlamanıza otomatik olarak eklenir.
Dikkat
öğesinin DiscoveryClientBindingElement istemci kanalı yığınınızdaki en üst öğe olması önerilir. üzerine DiscoveryClientBindingElement eklenen herhangi bir bağlama öğesi, oluşturduğu veya kanalının ChannelFactory uç nokta adresini veya Via
adresini (yönteme CreateChannel
geçirilir) kullanmadığından emin olmalıdır, çünkü bunlar doğru adresi içermeyebilir.
DiscoveryClientBindingElement sınıfı iki ortak özellik içerir:
FindCriteria, çağırmak istediğiniz hizmeti açıklamak için kullanılır.
DiscoveryEndpointProvider bulma iletilerinin gönderildiği bulma uç noktasını belirtir.
FindCriteria özelliği, aradığınız hizmet sözleşmesini, gerekli kapsam URI'lerini ve kanalı açmaya çalışmak için gereken en fazla süreyi belirtmenize olanak tanır. Sözleşme türü oluşturucu FindCriteriaçağrılarak belirtilir. Kapsam URI'leri özelliğine Scopes eklenebilir. özelliği, MaxResults istemcinin bağlanmaya çalıştığı en fazla sonuç sayısını belirtmenize olanak tanır. Yoklama yanıtı alındığında istemci, yoklama yanıtından uç nokta adresini kullanarak kanalı açmaya çalışır. Bir özel durum oluşursa, istemci bir sonraki yoklama yanıtına geçer ve gerekirse daha fazla yanıtın alınmasını bekler. Kanal başarıyla açılana veya maksimum sonuç sayısına ulaşılana kadar bunu yapmaya devam eder. Bu ayarlar hakkında daha fazla bilgi için bkz FindCriteria. .
DiscoveryEndpointProvider özelliği, kullanılacak bulma uç noktasını belirtmenize olanak tanır. Normalde bu bir UdpDiscoveryEndpoint'dir, ancak herhangi bir geçerli uç nokta olabilir.
Hizmetle iletişim kurmak için kullanılacak bağlamayı oluştururken, hizmetle tam olarak aynı bağlamayı kullanmaya dikkat etmeniz gerekir. Tek fark, istemci bağlamasının yığının üstünde bir DiscoveryClientBindingElement olmasıdır. Hizmet sistem tarafından sağlanan bağlamalardan birini kullanıyorsa, yeni CustomBinding bir oluşturun ve sistem tarafından sağlanan bağlamayı oluşturucuya CustomBinding geçirin. Ardından özelliğini çağırarak Insert
Elements öğesini ekleyebilirsinizDiscoveryClientBindingElement.
bağlamanıza öğesini ekleyip DiscoveryClientBindingElement yapılandırdıktan sonra WCF istemci sınıfının bir örneğini oluşturabilir, açabilir ve yöntemlerini çağırabilirsiniz. Aşağıdaki örnek, sınıfını uygulayan ICalculator
(Başlarken WCF öğreticisinde kullanılır) ve yöntemini çağıran bir WCF hizmetini bulmak için Bulma İstemci Kanalı'nı Add
kullanır.
// Create the DiscoveryClientBindingElement
DiscoveryClientBindingElement bindingElement = new DiscoveryClientBindingElement();
// Search for a service that implements the ICalculator interface, attempting to open
// the channel a maximum of 2 times
bindingElement.FindCriteria = new FindCriteria(typeof(ICalculator)) { MaxResults = 2 };
// Use the UdpDiscoveryEndpoint
bindingElement.DiscoveryEndpoint = new UdpDiscoveryEndpoint();
// The service uses the BasicHttpBinding, so use that and insert the DiscoveryClientBindingElement at the
// top of the stack
CustomBinding binding = new CustomBinding(new BasicHttpBinding());
binding.Elements.Insert(0,bindingElement);
try
{
// Create the WCF client and call a method
CalculatorClient client = new CalculatorClient(binding, new EndpointAddress("http://schemas.microsoft.com/dynamic"));
client.Open();
client.Add(1, 1);
}
catch (EndpointNotFoundException ex)
{
Console.WriteLine("An exception occurred: " + ex.Message);
}
Güvenlik ve Keşif İstemci Kanalı
Bulma istemci kanalı kullanılırken iki uç nokta belirtiliyor. Bunlardan biri genellikle bulma iletileri UdpDiscoveryEndpointiçin kullanılır ve diğeri uygulama uç noktasıdır. Güvenli bir hizmet uygularken her iki uç noktanın da güvenliğini sağlamak için dikkatli olunmalıdır. Güvenlik hakkında daha fazla bilgi için bkz . Hizmetleri ve İstemcileri Güvenli Hale Getirme.