Udostępnij za pośrednictwem


Używanie kanału klienta odnajdywania

Podczas pisania aplikacji klienckiej WCF musisz znać adres punktu końcowego wywoływanej usługi. W wielu sytuacjach adres punktu końcowego usługi nie jest znany z wyprzedzeniem lub adres usługi zmienia się w czasie. Kanał klienta odnajdywania umożliwia napisanie aplikacji klienckiej WCF, opisanie usługi, którą chcesz wywołać, a kanał klienta automatycznie wysyła żądanie sondy. Gdy usługa odpowiada, kanał klienta odnajdywania pobiera adres punktu końcowego dla usługi z odpowiedzi sondy i używa go do wywołania usługi.

Używanie kanału klienta odnajdywania

Aby użyć kanału klienta odnajdywania, dodaj wystąpienie DiscoveryClientBindingElement elementu do stosu kanału klienta. Alternatywnie możesz użyć DynamicEndpoint elementu , a DiscoveryClientBindingElement element zostanie automatycznie dodany do powiązania, jeśli jeszcze nie istnieje.

Uwaga

Zaleca się, aby element DiscoveryClientBindingElement był najbardziej najważniejszym elementem w stosie kanału klienta. Każdy element powiązania dodany na górze DiscoveryClientBindingElement elementu musi upewnić się, że ChannelFactory utworzony przez niego adres lub kanał nie używa adresu punktu końcowego lub Via adresu (przekazanego CreateChannel do metody), ponieważ mogą nie zawierać poprawnego adresu.

Klasa DiscoveryClientBindingElement zawiera dwie właściwości publiczne:

  1. FindCriteria, który służy do opisywania usługi, którą chcesz wywołać.

  2. DiscoveryEndpointProvider który określa punkt końcowy odnajdywania do wysyłania komunikatów odnajdywania do.

Właściwość FindCriteria umożliwia określenie szukanego kontraktu usługi, wszelkich wymaganych identyfikatorów URI zakresu oraz maksymalnej liczby czasu próby otwarcia kanału. Typ kontraktu jest określony przez wywołanie konstruktora FindCriteria. Identyfikatory URI zakresu można dodać do Scopes właściwości . Właściwość MaxResults umożliwia określenie maksymalnej liczby wyników, z którymi klient próbuje nawiązać połączenie. Po odebraniu odpowiedzi sondy klient próbuje otworzyć kanał przy użyciu adresu punktu końcowego z odpowiedzi sondy. Jeśli wystąpi wyjątek, klient przejdzie do następnej odpowiedzi sondy, czekając na odebranie większej liczby odpowiedzi w razie potrzeby. Będzie to kontynuowane do momentu pomyślnego otwarcia kanału lub osiągnięcia maksymalnej liczby wyników. Aby uzyskać więcej informacji na temat tych ustawień, zobacz FindCriteria.

Właściwość DiscoveryEndpointProvider umożliwia określenie punktu końcowego odnajdywania do użycia. Zwykle jest UdpDiscoveryEndpointto element , ale może to być dowolny prawidłowy punkt końcowy.

Podczas tworzenia powiązania używanego do komunikowania się z usługą należy zachować ostrożność, aby używać dokładnie tego samego powiązania co usługa. Jedyną różnicą jest powiązanie DiscoveryClientBindingElement klienta w górnej części stosu. Jeśli usługa używa jednego z powiązań dostarczonych przez system, utwórz nowe CustomBinding i przekaż powiązanie dostarczone przez system do konstruktora CustomBinding . Następnie możesz dodać element DiscoveryClientBindingElement , wywołując InsertElements właściwość .

Po dodaniu DiscoveryClientBindingElement elementu do powiązania i skonfigurowaniu go możesz utworzyć wystąpienie klasy klienta WCF, otworzyć je i wywołać jego metody. W poniższym przykładzie użyto kanału klienta odnajdywania w celu odnalezienia usługi WCF, która implementuje ICalculator klasę (używaną w samouczku Wprowadzenie w programie WCF) i wywołuje metodę Add .

// 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);  
}  

Zabezpieczenia i kanał klienta odnajdywania

W przypadku korzystania z kanału klienta odnajdywania są określane dwa punkty końcowe. Jeden jest używany do odnajdywania komunikatów, zwykle UdpDiscoveryEndpoint, a drugi to punkt końcowy aplikacji. Podczas implementowania bezpiecznej usługi należy zadbać o zabezpieczenie obu punktów końcowych. Aby uzyskać więcej informacji na temat zabezpieczeń, zobacz Zabezpieczanie usług i klientów.