Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejsy API odnajdywania udostępniają ujednolicony model programowania na potrzeby dynamicznej publikacji i odnajdywania usług sieci Web przy użyciu protokołu WS-Discovery. Te interfejsy API umożliwiają usługom publikowanie się, a klientom odnajdywanie opublikowanych usług. Po aktywowaniu możliwości odnajdywania, usługa może wysyłać komunikaty ogłoszeniowe oraz nasłuchiwać i odpowiadać na żądania odkrycia. Wykrywalne usługi mogą wysyłać wiadomości Hello, aby ogłosić ich przybycie do sieci i wiadomości Bye, aby ogłosić ich odejście z sieci. Aby znaleźć usługę Probe , klienci wysyłają żądanie zawierające określone kryteria, takie jak typ kontraktu usługi, słowa kluczowe i zakres w sieci. Usługi otrzymują żądanie Probe i sprawdzają, czy wniosek spełnia kryteria. Jeśli usługa spełnia kryteria, odpowiada, wysyłając ProbeMatch komunikat z powrotem do klienta z informacjami niezbędnymi do skontaktowania się z tą usługą. Klienci mogą również wysyłać Resolve żądania, które umożliwiają im znajdowanie usług, które mogły zmienić adres punktu końcowego. Pasujące usługi odpowiadają na Resolve żądania, wysyłając ResolveMatch komunikat z powrotem do klienta.
Tryby ad hoc i zarządzane
Interfejs API odnajdywania obsługuje dwa różne tryby: zarządzany i ad hoc. W trybie zarządzanym istnieje scentralizowany serwer o nazwie serwer proxy odnajdywania, który przechowuje informacje o dostępnych usługach. Proxy odkrywczy można zapełnić informacjami o usługach na różne sposoby. Na przykład usługi mogą wysyłać komunikaty anonsów podczas uruchamiania do serwera proxy odnajdywania lub serwer proxy może odczytywać dane z bazy danych lub pliku konfiguracji, aby określić, jakie usługi są dostępne. Sposób, w jaki mechanizm odnajdywania jest wypełniany, zależy całkowicie od programisty. Klienci używają serwera proxy wyszukiwania do pobierania informacji o dostępnych usługach. Gdy klient wyszukuje usługę Probe , wysyła komunikat do serwera proxy odnajdywania, a serwer proxy określa, czy którekolwiek z usług, które zna, są zgodne z usługą szukaną przez klienta. Jeśli istnieją dopasowania, serwer proxy odnajdywania wysyła ProbeMatch odpowiedź z powrotem do klienta. Klient może następnie skontaktować się z usługą bezpośrednio przy użyciu informacji o usłudze zwróconych z serwera proxy. Kluczową zasadą trybu zarządzanego jest to, że żądania odnajdywania są wysyłane w trybie unicast do jednego autorytetu, którym jest serwer proxy odnajdywania. Program .NET Framework zawiera kluczowe składniki, które umożliwiają tworzenie własnego serwera proxy. Klienci i usługi mogą zlokalizować serwer proxy za pomocą wielu metod:
Serwer proxy może odpowiedzieć na komunikaty ad hoc.
Serwer proxy może wysłać komunikat anonsu podczas uruchamiania.
Klienci i usługi mogą być tak skonfigurowane, aby wyszukiwać określony, dobrze znany adres końcowy.
W trybie ad hoc nie ma scentralizowanego serwera. Wszystkie komunikaty odnajdywania, takie jak anonsy usług i żądania klientów, są wysyłane w trybie multiemisji. Domyślnie program .NET Framework zawiera obsługę odnajdywania ad hoc za pośrednictwem protokołu UDP. Jeśli na przykład usługa jest skonfigurowana do wysyłania anonsu Hello podczas uruchamiania, wysyła go za pośrednictwem dobrze znanego adresu multiemisji przy użyciu protokołu UDP. Klienci muszą aktywnie słuchać tych anonsów i odpowiednio je przetwarzać. Gdy klient wysyła komunikat Probe dla usługi, jest on przesyłany przez sieć za pomocą protokołu multiemisji. Każda usługa, która odbiera żądanie, określa, czy spełnia kryteria w Probe komunikacie i odpowiada bezpośrednio klientowi za pomocą komunikatu ProbeMatch , jeśli usługa spełnia kryteria określone w Probe komunikacie.
Zalety korzystania z odnajdywania WCF
Ponieważ odnajdywanie WCF jest implementowane przy użyciu protokołu WS-Discovery, jest ono możliwe do współdziałania z innymi klientami, usługami i serwerami proxy, które implementują również WS-Discovery. Odnajdywanie WCF jest oparte na istniejących interfejsach API programu WCF, co ułatwia dodawanie funkcji odnajdywania do istniejących usług i klientów. Odnajdywanie usługi można łatwo dodać za pomocą ustawień konfiguracji aplikacji. Ponadto WCF Discovery obsługuje również używanie protokołu odnajdywania za pośrednictwem innych transportów, takich jak sieć równorzędna (peer net), nakładka nazewnictwa (naming overlay) i protokół HTTP. Odnajdywanie WCF zapewnia wsparcie dla trybu zarządzanego działania, w którym jest używany serwer proxy odnajdywania. Może to zmniejszyć ruch sieciowy, ponieważ komunikaty są wysyłane bezpośrednio do proxy odkrywania, zamiast rozsyłać komunikaty multicast do całej sieci. Odnajdywanie WCF umożliwia również większą elastyczność podczas pracy z usługami sieci Web. Można na przykład zmienić adres usługi bez konieczności ponownego konfigurowania klienta lub usługi. Gdy klient musi uzyskać dostęp do usługi, może wysłać Probe komunikat za pośrednictwem Find żądania i oczekiwać, że usługa odpowie przy użyciu bieżącego adresu. Odnajdywanie WCF umożliwia klientowi wyszukiwanie usługi na podstawie różnych kryteriów, w tym typów kontraktów, elementów powiązania, przestrzeni nazw, zakresu i słów kluczowych lub numerów wersji. Odnajdywanie WCF umożliwia odkrywanie usług zarówno podczas czasu wykonania, jak i podczas czasu projektowania. Dodanie odnajdywania do aplikacji może służyć do włączania innych scenariuszy, takich jak odporność na uszkodzenia i automatyczna konfiguracja.
Publikacja usługi
Aby można było odnaleźć usługę, ServiceDiscoveryBehavior należy dodać element do hosta usługi, a punkt końcowy odnajdywania należy dodać, aby określić miejsce nasłuchiwania komunikatów odnajdywania. W poniższym przykładzie kodu pokazano, jak można zmodyfikować usługę self-hosted, aby umożliwić jej odnajdywanie.
Uri baseAddress = new Uri($"http://{System.Net.Dns.GetHostName()}:8000/discovery/scenarios/calculatorservice/{Guid.NewGuid().ToString()}/");
// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
// Add calculator endpoint
serviceHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), string.Empty);
// ** DISCOVERY ** //
// Make the service discoverable by adding the discovery behavior
serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
// ** DISCOVERY ** //
// Add the discovery endpoint that specifies where to publish the services
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
// Open the ServiceHost to create listeners and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
}
Aby można było odkryć usługę, instancja ServiceDiscoveryBehavior musi być dodana do jej opisu. Wystąpienie DiscoveryEndpoint należy dodać do hosta usługi, aby poinformować usługę, gdzie należy nasłuchiwać żądań odnajdywania. W tym przykładzie dodawany jest element UdpDiscoveryEndpoint (pochodzący z elementu DiscoveryEndpoint), aby określić, że usługa powinna nasłuchiwać żądań odkrycia poprzez multiemisję UDP. Element UdpDiscoveryEndpoint jest używany do odnajdywania ad hoc, ponieważ wszystkie komunikaty są wysyłane w trybie multicast.
Ogłoszenie
Domyślnie publikacja usługi nie wysyła komunikatów o anonsach. Usługa musi być skonfigurowana do wysyłania komunikatów o anonsach. To zapewnia dodatkową elastyczność dla osób piszących usługi, ponieważ mogą one ogłaszać usługę niezależnie od nasłuchiwania komunikatów odnajdywania. Ogłoszenie usługi może być również używane jako mechanizm rejestrowania usług za pomocą proxy odkrywającego lub innych rejestrów usług. Poniższy kod pokazuje, jak skonfigurować usługę do wysyłania komunikatów anonsów za pośrednictwem powiązania UDP.
Uri baseAddress = new Uri($"http://{System.Net.Dns.GetHostName()}:8000/discovery/scenarios/calculatorservice/{Guid.NewGuid().ToString()}/");
// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
// Add calculator endpoint
serviceHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), string.Empty);
// ** DISCOVERY ** //
// Make the service discoverable by adding the discovery behavior
ServiceDiscoveryBehavior discoveryBehavior = new ServiceDiscoveryBehavior();
serviceHost.Description.Behaviors.Add(discoveryBehavior);
// Send announcements on UDP multicast transport
discoveryBehavior.AnnouncementEndpoints.Add(
new UdpAnnouncementEndpoint());
// ** DISCOVERY ** //
// Add the discovery endpoint that specifies where to publish the services
serviceHost.Description.Endpoints.Add(new UdpDiscoveryEndpoint());
// Open the ServiceHost to create listeners and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
}
Odnajdywanie usług
Aplikacja kliencka może używać DiscoveryClient klasy do znajdowania usług. Deweloper tworzy wystąpienie klasy DiscoveryClient, przekazując punkt końcowy odnajdywania, który określa, gdzie wysłać komunikaty Probe lub Resolve. Następnie klient wywołuje Find, które określa kryteria wyszukiwania w ramach FindCriteria wystąpienia. Jeśli zostaną znalezione pasujące usługi, Find zwraca kolekcję EndpointDiscoveryMetadata. Poniższy kod pokazuje, jak wywołać metodę Find , a następnie nawiązać połączenie z odnalezioną usługą.
class Client
{
static EndpointAddress serviceAddress;
static void Main()
{
if (FindService())
{
InvokeService();
}
}
// ** DISCOVERY ** //
static bool FindService()
{
Console.WriteLine("\nFinding Calculator Service ..");
DiscoveryClient discoveryClient =
new DiscoveryClient(new UdpDiscoveryEndpoint());
Collection<EndpointDiscoveryMetadata> calculatorServices =
(Collection<EndpointDiscoveryMetadata>)discoveryClient.Find(new FindCriteria(typeof(ICalculator))).Endpoints;
discoveryClient.Close();
if (calculatorServices.Count == 0)
{
Console.WriteLine("\nNo services are found.");
return false;
}
else
{
serviceAddress = calculatorServices[0].Address;
return true;
}
}
static void InvokeService()
{
Console.WriteLine("\nInvoking Calculator Service at {0}\n", serviceAddress);
// Create a client
CalculatorClient client = new CalculatorClient();
client.Endpoint.Address = serviceAddress;
client.Add(10,3);
}
}
Zabezpieczenia na poziomie odnajdywania i komunikatów
W przypadku korzystania z zabezpieczeń na poziomie komunikatów należy określić punkt końcowy EndpointIdentity odnajdywania usługi oraz odpowiadający punkt końcowy EndpointIdentity odnajdywania klienta. Aby uzyskać więcej informacji na temat zabezpieczeń na poziomie komunikatów, zobacz Zabezpieczenia komunikatów.
Odnajdywanie i usługi hostowane w Sieci Web
Aby usługi WCF mogły być wykrywalne, muszą być uruchomione. Usługi WCF hostowane w IIS lub WAS nie są uruchamiane, dopóki IIS/WAS nie odbierze komunikatu przeznaczonego dla usługi, więc nie są wykrywalne domyślnie. Istnieją dwie opcje umożliwiające odnajdywanie usług Web-Hosted:
Użyj funkcji Auto-Start Windows Server AppFabric
Używanie serwera proxy odnajdywania do komunikowania się w imieniu usługi
Windows Server AppFabric ma funkcję automatycznego uruchamiania, która umożliwi uruchomienie usługi przed odebraniem komunikatów. Z tym zestawem automatycznego uruchamiania, usługa hostowana przez IIS/WAS może być skonfigurowana tak, aby była łatwa do odnalezienia. Aby uzyskać więcej informacji na temat funkcji automatycznego uruchamiania, zobacz Funkcja automatycznego uruchamiania systemu Windows Server AppFabric. Oprócz włączenia funkcji Automatycznego uruchamiania należy skonfigurować usługę na potrzeby wykrywania. Aby uzyskać więcej informacji, zobacz Instrukcje: Programowe dodawanie możliwości odnajdywania do usługi WCF i klienta (How to: Programmatically Add Discoverability to a WCF Service and Client) oraz Konfigurowanie odnajdywania w pliku konfiguracji (Configuring Discovery in a Configuration File).
Proxy odnajdywania może być używany do komunikacji w imieniu usługi WCF, gdy usługa nie jest uruchomiona. Serwer proxy może nasłuchiwać sondy lub rozpoznawać komunikaty i odpowiadać na klienta. Klient może następnie wysyłać komunikaty bezpośrednio do usługi. Gdy klient wyśle komunikat do usługi, zostanie utworzone wystąpienie usługi, aby odpowiedzieć na komunikat. Aby uzyskać więcej informacji na temat implementowania serwera proxy odnajdywania, zobacz Implementowanie serwera proxy odnajdywania.
Uwaga / Notatka
Aby odnajdywanie WCF działało poprawnie, wszystkie karty sieciowe (kontroler interfejsu sieciowego) powinny mieć tylko 1 adres IP.