Sdílet prostřednictvím


Objektový model zjišťování WCF

Zjišťování WCF se skládá ze sady typů, které poskytují jednotný programovací model, který umožňuje psát služby, které jsou zjistitelné za běhu, a klienti, kteří tyto služby vyhledávají a používají.

Zjišťování a hledání služeb

Pokud chcete, aby služba WCF byla zjistitelná, přidejte ServiceDiscoveryBehavior ji do ServiceDescription hostitele služby a přidejte koncový bod zjišťování. Pokud je služba nakonfigurovaná tak, aby odesílala oznámení (přidáním AnnouncementEndpoint) oznámení se odešle při otevření a zavření hostitele služby.

Klient, který chce naslouchat zprávám oznámení služby, hostuje službu oznámení a přidá jeden nebo více koncových bodů oznámení. Služba oznámení přijímá zprávy oznámení a vyvolává události oznámení.

Klient používá DiscoveryClient třídu k vyhledání dostupných služeb. Klientská aplikace vytvoří DiscoveryClient instanci třídy a předá koncový bod zjišťování, který určuje, kam se mají odesílat zprávy zjišťování. Klient volá metodu Find , která odešle Probe požadavek. Služby, které naslouchají zprávě zjišťování, obdrží tento Probe požadavek. Pokud služba odpovídá kritériím zadaným v sadě Probe, odešle ProbeMatch zprávu zpět klientovi.

Objektový model

Rozhraní API pro zjišťování WCF definuje následující třídy:

AnnouncementClient

Třída AnnouncementClient poskytuje synchronní a asynchronní metody pro odesílání zpráv oznámení. Existují dva typy oznámení, Hello a Bye. Zpráva Hello se odešle s oznámením, že služba je k dispozici a zpráva Bye se odešle s oznámením, že existující služba je nedostupná. Vývojář vytvoří AnnouncementClient instanci a předá instanci AnnouncementEndpoint jako parametr konstruktoru.

AnnouncementEndpoint

AnnouncementEndpoint představuje standardní koncový bod s pevným kontraktem oznámení. Služba nebo klient ji používá k odesílání a přijímání oznámení. Ve výchozím nastavení je třída nastavena tak, AnnouncementEndpoint aby používala verzi protokolu WS_Discovery 11.

AnnouncementService

AnnouncementService je systémová implementace služby oznámení, která přijímá a zpracovává zprávy oznámení. Při přijetí AnnouncementService zprávy Hello nebo Bye volá instance příslušnou virtuální metodu OnBeginOnlineAnnouncement nebo OnBeginOfflineAnnouncement, která vyvolává události oznámení.

DiscoveryClient

Třída DiscoveryClient je používána klientskou aplikací k vyhledání a vyřešení dostupných služeb. Poskytuje synchronní a asynchronní metody pro hledání a překlad služeb na základě zadaného FindCriteria a ResolveCriteria v uvedeném pořadí. Vývojář vytvoří DiscoveryClient instanci a poskytne instanci DiscoveryEndpoint jako parametr konstruktoru.

Vývojář vyvolá synchronní nebo asynchronní Find metodu, která poskytuje FindCriteria instanci obsahující kritéria hledání, která se mají použít. Probe Vytvoří DiscoveryClient zprávu s odpovídajícími hlavičkami a odešle žádost o vyhledání. Vzhledem k tomu, že existuje více než jeden nevyřízených Find požadavků, klient koreluje přijaté odpovědi a ověří odpověď. Pak doručí výsledky volajícímu Find operace pomocí FindResponse.

Pokud chcete vyřešit známou službu, vývojář vyvolá synchronní nebo asynchronní Resolve metodu, která poskytuje instanci ResolveCriteria obsahující známou EndpointAddress službu. Resolve Vytvoří DiscoveryClient zprávu s odpovídajícími hlavičkami a odešle žádost o překlad. Přijatá odpověď koreluje s nevyřízených žádostí o vyřešení a výsledek se doručí volajícímu Resolve operace pomocí ResolveResponse.

Pokud je v síti přítomen proxy zjišťování a DiscoveryClient odešle požadavek zjišťování vícesměrovým vysíláním, může proxy zjišťování odpovědět zprávou Hello potlačení vícesměrového vysílání. ProxyAvailable Vyvolá DiscoveryClient událost, když obdrží zprávy Hello v reakci na nevyřízených Find nebo Resolve požadavků. Událost ProxyAvailable obsahuje EndpointDiscoveryMetadata informace o proxy zjišťování. Je na vývojáři, aby tyto informace použil k přechodu z ad hoc do spravovaného režimu.

DiscoveryEndpoint

DiscoveryEndpoint představuje standardní koncový bod s pevným kontraktem zjišťování. Služba nebo klient ji používá k odesílání nebo příjmu zpráv zjišťování. Ve výchozím nastavení DiscoveryEndpoint je nastaven režim použití ServiceDiscoveryMode.Managed a verze WSDiscovery11 WS-Discovery.

DiscoveryMessageSequenceGenerator

DiscoveryMessageSequenceGenerator slouží k vygenerování DiscoveryMessageSequence , kdy služba odesílá zprávy zjišťování nebo oznámení.

DiscoveryService

Abstraktní DiscoveryService třída poskytuje architekturu pro příjem a zpracování Probe a Resolve zprávy. Probe Při přijetí DiscoveryService zprávy vytvoří instanci FindRequestContext na základě příchozí zprávy a vyvolá virtuální metoduOnBeginFind. Resolve Při přijetí DiscoveryService zprávy vyvolá virtuální metoduOnBeginResolve. Z této třídy můžete dědit a poskytnout vlastní implementaci služby zjišťování.

ZjišťováníProxy

Abstraktní DiscoveryProxy třída poskytuje rozhraní pro příjem a zpracování zpráv zjišťování a oznámení. Dědíte z této třídy při implementaci vlastního proxy zjišťování. Probe Při přijetí zprávy přes vícesměrové vysílání DiscoveryProxy třída volá virtuální metodu BeginShouldRedirectFind k určení, zda má být zpráva potlačení vícesměrového vysílání odeslána. Pokud se vývojář rozhodne neodeslat zprávu potlačení vícesměrového vysílání nebo pokud Probe byla zpráva přijata přes jednosměrové vysílání, vytvoří instanci FindRequestContext třídy na základě příchozí zprávy a vyvolá virtuální metodu OnBeginFind . Resolve Při přijetí zprávy přes vícesměrové vysílání třída DiscoveryProxy volá virtuální metodu ShouldRedirectResolve k určení, zda má být zpráva potlačení vícesměrového vysílání odeslána. Pokud se vývojář rozhodne neodeslat zprávu potlačení vícesměrového vysílání nebo pokud Resolve byla zpráva přijata přes jednosměrové vysílání, vytvoří instanci ResolveCriteria třídy na základě příchozí zprávy a vyvolá virtuální metodu OnBeginResolve . Když se přijme zpráva Hello nebo Bye, DiscoveryProxy zavolá příslušnou virtuální metodu (OnBeginOnlineAnnouncement nebo OnBeingOfflineAnnouncement), která vyvolá události oznámení.

Discoveryversion

Třída DiscoveryVersion představuje verzi protokolu zjišťování, která se má použít.

EndpointDiscoveryBehavior

Třída EndpointDiscoveryBehavior se používá k řízení zjistitelnosti koncového bodu, určení rozšíření, dalších názvů typů kontraktů. a rozsahy přidružené k danému koncovému bodu. Toto chování se přidá do koncového bodu aplikace, aby se nakonfigurovala .EndpointDiscoveryMetadata Po ServiceDiscoveryBehavior přidání do hostitele služby se ve výchozím nastavení stanou zjistitelné všechny koncové body aplikace hostované hostitelem služby. Vývojář může zjišťování konkrétního koncového bodu vypnout nastavením Enabled vlastnosti na falsehodnotu .

EndpointDiscoveryMetadata

Třída EndpointDiscoveryMetadata poskytuje reprezentaci koncového bodu publikovaného službou nezávislou na verzi. Obsahuje adresy koncových bodů, identifikátory URI naslouchání, názvy typů kontraktů, obory, verzi metadat a rozšíření určená vývojářem služby. Klient FindCriteria posílaný během Probe operace se shoduje s EndpointDiscoveryMetadata. Pokud kritéria odpovídají, EndpointDiscoveryMetadata vrátí se klientovi. Adresa koncového bodu se ResolveCriteria shoduje s adresou koncového EndpointDiscoveryMetadatabodu . Pokud kritéria odpovídají, EndpointDiscoveryMetadata vrátí se klientovi.

FindCriteria

Třída FindCriteria je třída nezávislá na verzi, která slouží k určení kritérií používaných při hledání služby. Plně podporuje kritéria definovaná službou WS-Discovery pro odpovídající služby. Obsahuje také rozšíření, která můžou vývojáři použít k určení vlastních hodnot, které je možné použít během odpovídajícího procesu. Vývojář může zadat kritéria Find ukončení operace zadáním MaxResults, který určuje celkový počet služeb, které vývojář hledá nebo který určuje Durationhodnotu , která určuje, jak dlouho klient čeká na odpovědi.

FindRequestContext

Třída FindRequestContext je vytvořena službou zjišťování na Probe základě zprávy, kterou obdrží, když klient zahájí Find operaci. Obsahuje instanci FindCriteria , kterou určil klient.

FindResponse

Třída FindResponse se vrátí volajícímu Find s odpověďmi Find operace. Nachází se také v FindCompletedEventArgs. Obsahuje kolekci EndpointDiscoveryMetadata, která je kolekcí zjištěných koncových bodů a slovníkem EndpointDiscoveryMetadata a DiscoveryMessageSequence.

ResolveCriteria

Třída ResolveCriteria je třída nezávislá na verzi, která slouží k určení kritérií používaných při překladu již známé služby. Obsahuje adresu koncového bodu známé služby. Vývojář může zadat kritéria ukončení operace překladu zadáním parametru Duration, který určuje, jak dlouho klient čeká na odpovědi.

ResolveResponse

Vrátí ResolveResponse se volající metodě Resolve s odpovědí operace Resolve . Nachází se také v ResolveCompletedEventArgs. Obsahuje instanci EndpointDiscoveryMetadata, která je zjištěna koncové body a instance DiscoveryMessageSequence.

ServiceDiscoveryBehavior

Třída ServiceDiscoveryBehavior umožňuje vývojáři přidat funkci zjišťování do služby. Toto chování přidáte do souboru ServiceHost. Třída ServiceDiscoveryBehavior iteruje koncové body aplikace přidané do hostitele služby a vytvoří kolekci EndpointDiscoveryMetadata z zjistitelných koncových bodů. Ve výchozím nastavení jsou všechny koncové body zjistitelné. Zjistitelnost konkrétního koncového bodu je možné řídit přidáním konkrétního koncového EndpointDiscoveryBehavior bodu. Pokud jsou koncové body oznámení přidány, ServiceDiscoveryBehavior oznámení všech zjistitelných koncových bodů se odešle přes každý koncový bod oznámení při otevření nebo zavření hostitele služby.

UdpAnnouncementEndpoint

Třída UdpAnnouncementEndpoint je standardní koncový bod oznámení, který je předem nakonfigurovaný pro oznámení přes vazbu UDP vícesměrového vysílání. Ve výchozím nastavení UdpAnnouncementEndpoint je nastavena na použití WSApril2005 WS_Discovery verze.

Udpdiscoveryendpoint

Třída UdpDiscoveryEndpoint je standardní koncový bod zjišťování, který je předem nakonfigurovaný pro zjišťování přes vazbu vícesměrového vysílání UDP. Ve výchozím nastavení DiscoveryEndpoint je nastavena na použití verze a ServiceDiscoveryMode.Adhoc režimu WSDiscovery11 WS-Discovery.