Udostępnij przez


Model obiektów odnajdywania WCF

Odnajdywanie WCF składa się z zestawu typów, zapewniających ujednolicony model programowania umożliwiający pisanie usług odnajdywanych w trakcie działania aplikacji oraz klientów, którzy te usługi znajdą i z nich skorzystają.

Umożliwienie wykrywania usługi i wyszukiwanie 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 odbierać komunikaty o usługach, uruchamia usługę ogłoszeniową i dodaje co najmniej jeden punkt końcowy ogłoszenia. 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 instancję klasy DiscoveryClient, 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 elemencie Probe, wysyła komunikat ProbeMatch z powrotem do klienta.

Model obiektu

API odkrywania WCF definiuje następujące klasy:

AnonsClient

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 instancję AnnouncementClient, przekazując instancję AnnouncementEndpoint jako parametr konstruktora.

Punkt końcowy ogłoszenia

AnnouncementEndpoint reprezentuje standardowy punkt końcowy z ustalonym kontraktem ogłoszenia. 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.

UsługaOgłoszeń

AnnouncementService to dostarczana przez system implementacja usługi anonsowania, która odbiera i przetwarza komunikaty anonsów. Po odebraniu komunikatu Hello lub Bye, instancja wywołuje odpowiednią wirtualną metodę AnnouncementService lub OnBeginOnlineAnnouncement, która zgłasza zdarzenia ogłoszenia.

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 instancję DiscoveryClient i przekazuje instancję 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 komunikat Probe z odpowiednimi nagłówkami i wysyła żądanie wyszukiwania. 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, zawierające EndpointAddress dotyczącą znanej usługi. Element DiscoveryClient tworzy Resolve komunikat z odpowiednimi nagłówkami i wysyła żądanie rozstrzygnięcia. 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 proxy odnajdywania jest obecne w sieci i DiscoveryClient wysyła żądanie odnajdywania w sposób multiemisji, proxy odnajdywania może odpowiedzieć za pomocą komunikatu Pominięcia Multiemisji Hello. Zdarzenie DiscoveryClient jest wywoływane ProxyAvailable , gdy odbiera komunikaty Hello w odpowiedzi na zaległe Find lub Resolve żądania. Zdarzenie ProxyAvailable zawiera dane o EndpointDiscoveryMetadata proxy odnajdywania. Deweloper musi użyć tych informacji, aby przełączyć się z trybu ad hoc na zarządzany.

OdnajdywanieEndpoint

DiscoveryEndpoint reprezentuje standardowy punkt końcowy ze stałym kontraktem odkrywania. Jest on używany przez usługę lub klienta do wysyłania lub odbierania komunikatów odnajdywania. Domyślnie DiscoveryEndpoint jest ustawiony, aby używać trybu ServiceDiscoveryMode.Managed i wersji WS-Discovery WSDiscovery11.

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, DiscoveryService tworzy wystąpienie FindRequestContext na podstawie komunikatu przychodzącego i wywołuje metodę wirtualną OnBeginFind. Po odebraniu komunikatu Resolve, DiscoveryService wywołuje metodę wirtualną OnBeginResolve. Możesz dziedziczyć z tej klasy, aby utworzyć niestandardową implementację Discovery Service.

DiscoveryProxy

Klasa abstrakcyjna DiscoveryProxy udostępnia strukturę do odbierania i przetwarzania komunikatów odnajdywania oraz ogłoszeń. Dziedziczysz z tej klasy podczas implementowania niestandardowego proxy odnajdywania. Po odebraniu komunikatu Probe za pośrednictwem multicastu klasa DiscoveryProxy wywołuje metodę wirtualną BeginShouldRedirectFind, aby określić, czy ma zostać wysłany komunikat pomijania multicastu. Jeśli deweloper zdecyduje się nie wysyłać komunikatu tłumienia multiemisji lub jeśli komunikat Probe został odebrany za pośrednictwem unicast, tworzy wystąpienie klasy FindRequestContext na podstawie komunikatu przychodzącego i wywołuje wirtualną metodę OnBeginFind. Po odebraniu komunikatu Resolve za pośrednictwem multiemisji klasa DiscoveryProxy wywołuje metodę wirtualną ShouldRedirectResolve, aby określić, czy ma zostać wysłany komunikat pomijania multiemisji. Jeśli deweloper zdecyduje się nie wysyłać komunikatu tłumienia multiemisji lub jeśli komunikat Resolve został odebrany za pośrednictwem unicast, tworzy wystąpienie klasy ResolveCriteria na podstawie komunikatu przychodzącego i wywołuje wirtualną metodę 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 EndpointDiscoveryMetadata jego elementu. 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.

Metadane Odkrywania Punktu Końcowego

Klasa EndpointDiscoveryMetadata zapewnia niezależną od wersji reprezentację punktu końcowego opublikowanego przez usługę. Zawiera adresy punktów końcowych, identyfikatory URI odsłuchiwania, nazwy typów kontraktów, zakresy, wersję metadanych i rozszerzenia określone przez programistę usługi. Wysłane przez klienta FindCriteria podczas operacji Probe są dopasowywane do EndpointDiscoveryMetadata. Jeśli kryteria są zgodne, EndpointDiscoveryMetadata jest zwracane do klienta. Adres punktu końcowego w ResolveCriteria jest porównywany z adresem punktu końcowego w EndpointDiscoveryMetadata. Jeśli kryteria są zgodne, EndpointDiscoveryMetadata jest zwracane 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 protokół WS-Discovery dotyczące 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.

ZnajdźKontekstŻądania

Klasa FindRequestContext jest tworzona przez usługa odnajdywania na podstawie komunikatu Probe, który otrzymuje, gdy klient inicjuje operację Find. Zawiera wystąpienie FindCriteria określone przez klienta.

FindResponse

Klasa FindResponse jest zwracana do obiektu wywołującego Find wraz z odpowiedziami uzyskanymi z operacji Find. 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.

KryteriaRozwiązywania

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 wywołującego metodę Resolve wraz z odpowiedzią operacji Resolve. Jest on również obecny w pliku ResolveCompletedEventArgs. Zawiera wystąpienie klasy EndpointDiscoveryMetadata, które są odkrytymi punktami końcowymi, i wystąpienie klasy DiscoveryMessageSequence.

ServiceDiscoveryBehavior

Klasa ServiceDiscoveryBehavior umożliwia deweloperowi dodanie funkcji odnajdywania do usługi. Dodajesz to zachowanie do elementu ServiceHost. Klasa ServiceDiscoveryBehavior iteruje przez punkty końcowe aplikacji dodane do hosta usługi i tworzy kolekcję EndpointDiscoveryMetadata z możliwych do odkrycia 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 ServiceDiscoveryBehavior, ogłoszenie wszystkich odnajdywalnych punktów końcowych jest wysyłane za pośrednictwem każdego z punktów końcowych anonsu, gdy host usługi jest otwierany lub zamykany.

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 ustawiono na używanie wersji 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 na używanie wersji WSDiscovery11 WS-Discovery i trybu ServiceDiscoveryMode.Adhoc.