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.
Funkcja odnajdywania WCF umożliwia składnikom ogłaszanie ich dostępności. Jeśli zostało to skonfigurowane, usługa wysyła anonse Hello i Bye. Klienci lub inne składniki mogą nasłuchiwać takich komunikatów ogłoszeniowych i reagować na nie. Zapewnia to alternatywną metodę dla klientów, by byli świadomi usług. Funkcja anonsu ma kilka zastosowań, na przykład jeśli usługi wchodzą i opuszczają sieć często, ogłoszenia mogą być lepszym rozwiązaniem niż wyszukiwanie usług. Dzięki temu ruch sieciowy jest ograniczany i klient może dowiedzieć się więcej o obecności lub odejściu usługi, gdy tylko zostaną odebrane ogłoszenia.
Ogłoszenia dotyczące odnajdywania
Gdy usługa skonfigurowana pod kątem anonsów dołącza do sieci i staje się wykrywalna, wysyła komunikat Hello ogłaszający dostępność klientów nasłuchujących. Komunikat zawiera informacje dotyczące odnajdywania powiązane z usługą, takie jak jego kontrakt, adres punktu końcowego i skojarzone zakresy. Możesz określić, gdzie komunikat anonsu jest wysyłany z klasą AnnouncementEndpoint . Jeśli punkt końcowy ogłoszenia to UdpAnnouncementEndpoint, wtedy komunikaty "Hello" i "Bye" są rozsyłane przez multiemisję zgodnie z przeznaczeniem, a jeśli punkt końcowy ogłoszenia jest unicastem, komunikaty są wysyłane bezpośrednio do określonego punktu końcowego.
Uwaga / Notatka
Anonse są wysyłane po otwarciu i zamknięciu hosta usługi. Jeśli te wywołania nie zakończą się poprawnie, komunikat o anonsie może nie zostać wysłany. Na przykład, jeśli nastąpi awaria usługi, komunikat o pożegnaniu nie jest wysyłany.
Wskazówka
Możesz dostosować funkcję anonsu, umożliwiając wysyłanie anonsów za każdym razem, gdy wybierzesz.
Program .NET Framework 4.6.1 definiuje AnnouncementEndpoint i UdpAnnouncementEndpoint jako standardowe punkty końcowe, aby umożliwić usługom i klientom łatwe wysyłanie anonsów typu "Hello" i "Bye".
Ogłoszenia dotyczące usługi
Aby skonfigurować usługę do wysyłania anonsów, dodaj element ServiceDiscoveryBehavior z punktem końcowym anonsu. W poniższym przykładzie pokazano, jak programowo dodać to zachowanie do hosta usługi. W tym przykładzie użyto elementu UdpAnnouncementEndpoint
, co oznacza, że anonse są multikastowane do lokalizacji określonej przez ten standardowy punkt końcowy.
ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();
serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);
Zachowanie można również skonfigurować w pliku konfiguracji, jak pokazano w poniższym przykładzie.
<services>
<service behaviorConfiguration="CalculatorBehavior" name="Microsoft.Samples.Discovery.CalculatorService">
<!--Add Discovery Endpoint-->
<endpoint name="udpDiscoveryEpt" kind="udpDiscoveryEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorBehavior">
<!--Add Discovery behavior-->
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint" />
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
</behaviors>
Powyższe przykłady umożliwiają skonfigurowanie usługi w celu automatycznego wysyłania komunikatów o anonsach. Możesz również wysyłać komunikaty ogłoszeniowe jawnie, korzystając z klasy AnnouncementClient.
Ogłoszenia dotyczące klienta
Aplikacja kliencka musi hostować usługę ogłoszeń, aby reagować na komunikaty Hello i Bye oraz subskrybować wydarzenia OnlineAnnouncementReceived i OfflineAnnouncementReceived. W poniższym przykładzie pokazano, jak to zrobić.
// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();
// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;
// Create ServiceHost for the AnnouncementService
using (ServiceHost announcementServiceHost = new ServiceHost(announcementService))
{
// Listen for the announcements sent over UDP multicast
announcementServiceHost.AddServiceEndpoint(new UdpAnnouncementEndpoint());
announcementServiceHost.Open();
Console.WriteLine("Press <ENTER> to terminate.");
Console.ReadLine();
}
Po odebraniu komunikatu Hello lub Bye można uzyskać dostęp do metadanych odnajdywania punktów końcowych przez AnnouncementEventArgs, jak pokazano w poniższym przykładzie.
static void OnOnlineEvent(object sender, AnnouncementEventArgs e)
{
Console.WriteLine("Received an online announcement from {0}",
e.EndpointDiscoveryMetadata.Address);
}
static void OnOfflineEvent(object sender, AnnouncementEventArgs e)
{
Console.WriteLine("Received an offline announcement from {0}",
e.EndpointDiscoveryMetadata.Address);
}