Model obiektów odnajdywania WCF
Odnajdywanie WCF składa się z zestawu typów, które zapewniają ujednolicony model programowania, który umożliwia pisanie usług, które można odnajdywać w czasie wykonywania, oraz klientów, którzy znajdą te usługi i korzystają z nich.
Tworzenie usług z możliwością odnajdywania i znajdowania usług
Aby można było odnaleźć usługę WCF, dodaj element ServiceDiscoveryBehavior do ServiceDescription hosta usługi i dodaj punkt końcowy odnajdywania. Jeśli usługa jest skonfigurowana do wysyłania komunikatów anonsów (przez dodanie AnnouncementEndpoint) anons jest wysyłany po otwarciu i zamknięciu hosta usługi.
Klient, który chce nasłuchiwać komunikatów anonsów usługi hostuje usługę anonsowania i dodaje co najmniej jeden punkt końcowy anonsu. Usługa anonsowania odbiera komunikaty o anonsach i zgłasza zdarzenia anonsów.
Klient używa DiscoveryClient klasy do wyszukiwania dostępnych usług. Aplikacja kliencka tworzy wystąpienie DiscoveryClient klasy, przekazując punkt końcowy odnajdywania, który określa, gdzie wysyłać komunikaty odnajdywania. Klient wywołuje metodę FindProbe
, która wysyła żądanie. Usługi nasłuchiwania komunikatów odnajdywania odbierają to Probe
żądanie. Jeśli usługa spełnia kryteria określone w elemecie Probe
, wysyła ProbeMatch
komunikat z powrotem do klienta.
Model obiektu
Interfejs API odnajdywania WCF definiuje następujące klasy:
Announcementclient
Klasa AnnouncementClient udostępnia metody synchroniczne i asynchroniczne do wysyłania komunikatów anonsów. Istnieją dwa typy komunikatów anonsów: Hello i Bye. Wiadomość hello jest wysyłana, aby wskazać, że usługa stała się dostępna, a komunikat Bye jest wysyłany, aby wskazać, że istniejąca usługa stała się niedostępna. Deweloper tworzy AnnouncementClient wystąpienie, przekazując wystąpienie AnnouncementEndpoint jako parametr konstruktora.
Announcementendpoint
AnnouncementEndpoint reprezentuje standardowy punkt końcowy z ustalonym kontraktem anonsu. Jest on używany przez usługę lub klienta do wysyłania i odbierania komunikatów o anonsach. Domyślnie AnnouncementEndpoint klasa ma używać wersji protokołu WS_Discovery 11.
Announcementservice
AnnouncementService to dostarczana przez system implementacja usługi anonsowania, która odbiera i przetwarza komunikaty anonsów. Po odebraniu AnnouncementService komunikatu Hello lub Bye wystąpienie wywołuje odpowiednią metodę OnBeginOnlineAnnouncement wirtualną lub OnBeginOfflineAnnouncement, która zgłasza zdarzenia anonsu.
Discoveryclient
Klasa DiscoveryClient jest używana przez aplikację kliencką do znajdowania i rozwiązywania dostępnych usług. Zapewnia metody synchroniczne i asynchroniczne do znajdowania i rozwiązywania usług odpowiednio na podstawie określonych FindCriteria i ResolveCriteria . Deweloper tworzy DiscoveryClient wystąpienie i udostępnia wystąpienie DiscoveryEndpoint jako parametr konstruktora.
Aby znaleźć usługę, deweloper wywołuje metodę synchroniczną lub asynchroniczną Find
, która udostępnia FindCriteria wystąpienie zawierające kryteria wyszukiwania do użycia. Obiekt DiscoveryClient tworzy Probe
komunikat z odpowiednimi nagłówkami i wysyła żądanie znajdowania. Ponieważ w dowolnym momencie może istnieć więcej niż jedno zaległe Find
żądanie, klient koreluje odebrane odpowiedzi i weryfikuje odpowiedź. Następnie dostarcza wyniki do obiektu wywołującego operację Find
przy użyciu polecenia FindResponse.
Aby rozwiązać znaną usługę, deweloper wywołuje metodę synchroniczną lub asynchroniczną Resolve
, która udostępnia wystąpienie ResolveCriteria , które zawiera EndpointAddress znaną usługę. Element DiscoveryClient tworzy Resolve
komunikat z odpowiednimi nagłówkami i wysyła żądanie rozwiązania. Odebrana odpowiedź jest skorelowana z zaległymi żądaniami rozwiązywania, a wynik jest dostarczany do obiektu wywołującego operację Resolve
przy użyciu polecenia ResolveResponse.
Jeśli serwer proxy odnajdywania jest obecny w sieci i DiscoveryClient wysyła żądanie odnajdywania w trybie multiemisji, serwer proxy odnajdywania może odpowiedzieć za pomocą komunikatu hello pomijania multiemisji. Zdarzenie DiscoveryClient jest wywoływane ProxyAvailable
, gdy odbiera komunikaty Hello w odpowiedzi na zaległe Find
lub Resolve
żądania. Zdarzenie ProxyAvailable
zawiera informacje o EndpointDiscoveryMetadata serwerze proxy odnajdywania. Deweloper musi użyć tych informacji, aby przełączyć się z trybu ad hoc na zarządzany.
Discoveryendpoint
DiscoveryEndpoint reprezentuje standardowy punkt końcowy z kontraktem stałego odnajdywania. Jest on używany przez usługę lub klienta do wysyłania lub odbierania komunikatów odnajdywania. Domyślnie DiscoveryEndpoint jest ustawiona opcja użyj ServiceDiscoveryMode.Managed trybu i wersji WSDiscovery11 WS-Discovery.
Discoverymessagesequencegenerator
DiscoveryMessageSequenceGenerator jest używany do generowania DiscoveryMessageSequence , gdy usługa wysyła komunikaty odnajdywania lub anonsów.
Discoveryservice
Klasa abstrakcyjna DiscoveryService udostępnia platformę do odbierania i przetwarzania Probe
i Resolve
komunikatów. Po odebraniu komunikatu Probe
tworzy wystąpienie FindRequestContext na podstawie komunikatu przychodzącego i wywołuje metodę wirtualnąOnBeginFind. DiscoveryService Po odebraniu komunikatu Resolve
wywołuje metodę wirtualnąOnBeginResolve. DiscoveryService Możesz dziedziczyć z tej klasy, aby zapewnić niestandardową implementację usługi odnajdywania.
Discoveryproxy
Klasa abstrakcyjna DiscoveryProxy udostępnia platformę do odbierania i przetwarzania komunikatów odnajdywania i anonsów. Dziedziczysz z tej klasy podczas implementowania niestandardowego serwera proxy odnajdywania. Po odebraniu komunikatu Probe
za pośrednictwem multiemisji klasa wywołuje metodę wirtualnąBeginShouldRedirectFind
, aby określić, DiscoveryProxy czy ma zostać wysłany komunikat pomijania multiemisji. Jeśli deweloper zdecyduje się nie wysyłać komunikatu pomijania multiemisji lub jeśli Probe
komunikat został odebrany za pośrednictwem emisji pojedynczej, tworzy wystąpienie FindRequestContext klasy na podstawie komunikatu przychodzącego i wywołuje metodę wirtualną OnBeginFind
. Po odebraniu komunikatu Resolve
za pośrednictwem multiemisji klasa wywołuje metodę wirtualnąShouldRedirectResolve
, aby określić, DiscoveryProxy czy ma zostać wysłany komunikat pomijania multiemisji. Jeśli deweloper zdecyduje się nie wysyłać komunikatu pomijania multiemisji lub jeśli Resolve
komunikat został odebrany za pośrednictwem emisji pojedynczej, tworzy wystąpienie ResolveCriteria klasy na podstawie komunikatu przychodzącego i wywołuje metodę wirtualną OnBeginResolve
. Po odebraniu DiscoveryProxy komunikatu Hello lub Bye wywołuje odpowiednią metodę wirtualną (OnBeginOnlineAnnouncement
lub OnBeingOfflineAnnouncement
), która zgłasza zdarzenia anonsu.
Discoveryversion
Klasa DiscoveryVersion reprezentuje wersję protokołu odnajdywania do użycia.
Endpointdiscoverybehavior
Klasa EndpointDiscoveryBehavior służy do kontrolowania możliwości odnajdywania punktu końcowego, określania rozszerzeń, dodatkowych nazw typów kontraktów. oraz zakresy skojarzone z tym punktem końcowym. To zachowanie jest dodawane do punktu końcowego aplikacji w celu skonfigurowania jego EndpointDiscoveryMetadataelementu . Po ServiceDiscoveryBehavior dodaniu do hosta usługi wszystkie punkty końcowe aplikacji hostowane przez hosta usługi stają się domyślnie możliwe do odnalezienia. Deweloper może wyłączyć odnajdywanie dla określonego punktu końcowego, ustawiając Enabled właściwość na false
.
Endpointdiscoverymetadata
Klasa EndpointDiscoveryMetadata zapewnia niezależną od wersji reprezentację punktu końcowego opublikowanego przez usługę. Zawiera adresy punktów końcowych, identyfikatory URI nasłuchiwania, nazwy typów kontraktów, zakresy, wersję metadanych i rozszerzenia określone przez dewelopera usługi. Wysłane FindCriteria przez klienta podczas Probe
operacji są zgodne z elementem EndpointDiscoveryMetadata. Jeśli kryteria są zgodne, EndpointDiscoveryMetadata element jest zwracany do klienta. Adres punktu końcowego w pliku ResolveCriteria jest zgodny z adresem punktu końcowego .EndpointDiscoveryMetadata Jeśli kryteria są zgodne, EndpointDiscoveryMetadata element jest zwracany do klienta.
Findcriteria
Klasa FindCriteria jest niezależną od wersji klasą używaną do określania kryteriów używanych podczas znajdowania usługi. W pełni obsługuje kryteria zdefiniowane przez usługę WS do dopasowywania usług. Ma również rozszerzenia, których deweloperzy mogą używać do określania wartości niestandardowych, które mogą być używane podczas dopasowywania. Deweloper może podać kryteria Find
zakończenia operacji, określając MaxResultswartość , która określa łączną liczbę usług szukanych przez dewelopera lub określającą Durationwartość , która określa, jak długo klient czeka na odpowiedzi.
FindRequestContext
Klasa FindRequestContext jest tworzone przez usługę odnajdywania na podstawie komunikatu Probe
odbieranego, gdy klient inicjuje operację Find
. Zawiera wystąpienie FindCriteria określone przez klienta.
FindResponse
Klasa FindResponse jest zwracana do obiektu wywołującego Find z odpowiedziami Find
operacji. Jest on również obecny w pliku FindCompletedEventArgs. Zawiera kolekcję EndpointDiscoveryMetadata, która jest kolekcją odnalezionych punktów końcowych oraz słownikiem EndpointDiscoveryMetadata i DiscoveryMessageSequence.
Resolvecriteria
Klasa ResolveCriteria jest klasą niezależną od wersji służącą do określania kryteriów używanych podczas rozpoznawania już znanej usługi. Zawiera adres punktu końcowego znanej usługi. Deweloper może podać kryteria zakończenia operacji rozpoznawania, określając Durationparametr , który określa, jak długo klient czeka na odpowiedzi.
ResolveResponse
Element ResolveResponse jest zwracany do obiektu wywołującego Resolve metodę z odpowiedzią Resolve
operacji. Jest on również obecny w pliku ResolveCompletedEventArgs. Zawiera wystąpienie klasy EndpointDiscoveryMetadata, które jest odnalezionymi punktami końcowymi i wystąpieniem DiscoveryMessageSequenceklasy .
Servicediscoverybehavior
Klasa ServiceDiscoveryBehavior umożliwia deweloperowi dodanie funkcji odnajdywania do usługi. To zachowanie dodaje się do elementu ServiceHost. Klasa ServiceDiscoveryBehavior iteruje punkty końcowe aplikacji dodane do hosta usługi i tworzy kolekcję EndpointDiscoveryMetadata z odnajdwalnych punktów końcowych. Wszystkie punkty końcowe są domyślnie odnajdywalne. Możliwość odnajdywania określonego punktu końcowego może być kontrolowana przez dodanie elementu EndpointDiscoveryBehavior do tego konkretnego punktu końcowego. Jeśli punkty końcowe anonsu zostaną dodane do usługi , ogłoszenie wszystkich punktów końcowych możliwych do ServiceDiscoveryBehavior odnalezienia jest wysyłane za pośrednictwem każdego z punktów końcowych anonsu po otwarciu lub zamknięciu hosta usługi.
Udpannouncementendpoint
Klasa UdpAnnouncementEndpoint to standardowy punkt końcowy anonsu, który jest wstępnie skonfigurowany do anonsu za pośrednictwem powiązania multiemisji UDP. Domyślnie UdpAnnouncementEndpoint jest ustawiona opcja używania wersji programu WSApril2005 WS_Discovery.
Udpdiscoveryendpoint
Klasa UdpDiscoveryEndpoint to standardowy punkt końcowy odnajdywania, który jest wstępnie skonfigurowany do odnajdywania za pośrednictwem powiązania multiemisji UDP. Domyślnie DiscoveryEndpoint jest ustawiona opcja używania wersji i ServiceDiscoveryMode.Adhoc trybu odnajdywania WSDiscovery11.