Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. Klient kanału Discovery umożliwia napisanie aplikacji klienckiej WCF, opisanie usługi, którą chcesz wywołać, a kanał automatycznie wysyła zapytanie wykrywania. Gdy usługa odpowiada, kanał odnajdywania klienta pobiera adres punktu końcowego z odpowiedzi sondy i używa go do wywołania usługi.
Korzystanie z Discovery Client Channel
Aby użyć kanału klienta odnajdywania, dodaj wystąpienie DiscoveryClientBindingElement do stosu kanałów klienta. Alternatywnie możesz użyć elementu DynamicEndpoint, i element DiscoveryClientBindingElement zostanie automatycznie dodany do powiązania, jeśli jeszcze nie istnieje.
Ostrzeżenie
Zaleca się, aby element DiscoveryClientBindingElement był najbardziej najważniejszym elementem w stosie kanału klienta. Każdy element powiązania dodany w ramach DiscoveryClientBindingElement musi upewnić się, że ChannelFactory lub kanał, który tworzy, nie używa adresu punktu końcowego ani adresu Via
(przekazanego do metody CreateChannel
), ponieważ mogą one nie zawierać poprawnego adresu.
Klasa DiscoveryClientBindingElement zawiera dwie właściwości publiczne:
FindCriteria, który służy do opisywania usługi, którą chcesz wywołać.
DiscoveryEndpointProvider który określa punkt końcowy odnajdywania, do którego mają być wysyłane komunikaty odnajdywania.
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 to jest element UdpDiscoveryEndpoint, 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 to, że powiązanie klienta zawiera DiscoveryClientBindingElement na samym szczycie 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 Insert
na właściwości Elements.
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 Discovery Client do odnalezienia usługi WCF, która implementuje klasę ICalculator
(używaną w samouczku Wprowadzenie do WCF) i wywołuje jej 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ł Discovery dla klienta
W przypadku korzystania z kanału klienta wyszukiwania określa się 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.