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 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. 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.