Objektový model zjišťování WCF

Zjišťování WCF se skládá ze sady typů, které poskytují jednotný programovací model umožňující psaní služeb zjistitelných během provozu a klientů, kteří tyto služby vyhledávají a využívají.

Zpřístupnění služby pro vyhledá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 oznamování přijímá oznamovací zprávy a vyvolává oznamovací události.

Klient používá DiscoveryClient třídu k vyhledání dostupných služeb. Klientská aplikace instancuje třídu DiscoveryClient, předá koncový bod zjišťování, který určuje, kam se mají odesílat zprávy o zjišťování. Klient volá metodu Find , která odešle Probe požadavek. Služby, které naslouchají zjišťovacím zprávám, 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.

Koncový bod oznámení

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.

Služba oznámení

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 řešení služeb na základě zadaného FindCriteria a ResolveCriteria respektive. Vývojář vytvoří DiscoveryClient instanci a poskytne instanci DiscoveryEndpoint jako parametr konstruktoru.

K nalezení služby vývojář vyvolá synchronní nebo asynchronní Find metodu, která poskytuje FindCriteria instanci obsahující kritéria hledání, jež mají být použita. DiscoveryClient vytváří zprávu s odpovídajícími hlavičkami Probe 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. DiscoveryClient vytvoří Resolve zprávu s odpovídajícími hlavičkami a odešle žádost o vyřešení. Přijatá odpověď je porovnána s nevyřízenými žádostmi o vyřešení a výsledek je předán volajícímu operace Resolve pomocí ResolveResponse.

Pokud je v síti přítomen proxy zjišťování a DiscoveryClient odešle požadavek na zjišťování multicastově, může proxy zjišťování odpovědět zprávou "Hello" pro potlačení vícesměrového vysílání. DiscoveryClient vyvolá událost ProxyAvailable při obdržení zpráv Hello v reakci na nevyřízené Find nebo Resolve požadavky. Událost ProxyAvailable obsahuje informace EndpointDiscoveryMetadata o proxy serveru pro 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í. Zprávy zjišťování jsou odesílány nebo přijímány službou nebo klientem. Ve výchozím nastavení je DiscoveryEndpoint nastaveno na ServiceDiscoveryMode.Managed režim a verzi 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í.

Proxy pro zjišťování

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, když implementujete vlastní vyhledávací proxy. Probe Při přijetí zprávy přes vícesměrové vysílání třída DiscoveryProxy volá virtuální metodu BeginShouldRedirectFind, aby určila, zda má být odeslána zpráva pro potlačení vícesměrového vysílání. Pokud se vývojář rozhodne neodeslat zprávu potlačení multicastu, nebo pokud zpráva Probe byla přijata přes jednosměrové vysílání, vytvoří instanci třídy FindRequestContext na základě příchozí zprávy a poté 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í multicastu, nebo pokud zpráva Resolve byla přijata přes jednosměrové vysílání, vytvoří instanci třídy ResolveCriteria na základě příchozí zprávy a poté 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 spojené s daným koncovým bodem. Toto chování se přidá do koncového bodu aplikace, aby se nakonfigurovalo jeho 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 vlastnosti Enabled na false hodnotu.

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. FindCriteria zaslané klientem během operace Probe se shoduje s EndpointDiscoveryMetadata. Pokud kritéria odpovídají, EndpointDiscoveryMetadata se vrátí klientovi. Adresa koncového bodu ResolveCriteria je porovnávána s adresou koncového bodu EndpointDiscoveryMetadata. Pokud kritéria odpovídají, EndpointDiscoveryMetadata se vrátí klientovi.

Najít Kritéria

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 instanciována službou zjišťování na základě Probe zprávy, kterou obdrží, když klient zahájí Find operaci. Obsahuje instanci FindCriteria , kterou určil klient.

FindResponse

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

KritériaŘešení

Třída ResolveCriteria je třída nezávislá na verzi, která slouží k určení kritérií používaných při řešení 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í se ResolveResponse volajícímu metodě Resolve spolu s odpovědí na operaci Resolve. Také se nachází v ResolveCompletedEventArgs. Obsahuje instanci EndpointDiscoveryMetadata, které jsou zjištěné koncové body a instanci 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 prochází koncové body aplikace, které byly přidány do hostitele služby, a z těch zjistitelných koncových bodů vytváří kolekci EndpointDiscoveryMetadata. Ve výchozím nastavení jsou všechny koncové body zjistitelné. Možnost zjistit konkrétní koncový bod lze řídit přidáním EndpointDiscoveryBehavior k danému koncovému bodu. Pokud jsou oznamovací koncové body přidány do ServiceDiscoveryBehavior, oznámení všech zjistitelných koncových bodů se odešle přes každý oznamovací koncový bod 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í je UdpAnnouncementEndpoint nastavena na verzi WSApril2005 WS_Discovery.

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í je DiscoveryEndpoint nastaveno na používání verze WSDiscovery11 WS-Discovery a režimu ServiceDiscoveryMode.Adhoc.