WCF Discovery-objectmodel
WCF Discovery bestaat uit een set typen die een geïntegreerd programmeermodel bieden waarmee u services kunt schrijven die tijdens runtime kunnen worden gedetecteerd en clients die deze services vinden en gebruiken.
Een service detecteerbaar maken en services zoeken
Als u een WCF-service detecteerbaar wilt maken, voegt u een ServiceDiscoveryBehavior toe aan de ServiceDescription servicehost en voegt u een detectie-eindpunt toe. Als een service is geconfigureerd voor het verzenden van aankondigingsberichten (door een AnnouncementEndpointtoe te voegen) wordt de aankondiging verzonden wanneer de servicehost wordt geopend en gesloten.
Een client die wil luisteren naar berichten over serviceaankondigingen fungeert als host voor een aankondigingsservice en een of meer aankondigingseindpunten toevoegt. De aankondigingsservice ontvangt aankondigingsberichten en genereert aankondigingsevenementen.
Een client gebruikt de DiscoveryClient klasse om te zoeken naar beschikbare services. De clienttoepassing instantieert de DiscoveryClient klasse en geeft een detectie-eindpunt door dat aangeeft waar detectieberichten moeten worden verzonden. De client roept de Find methode aan, waarmee een Probe
aanvraag wordt verzonden. Services die luisteren naar detectieberichten ontvangen deze Probe
aanvraag. Als de service voldoet aan de criteria die zijn opgegeven in de Probe
service, wordt er een ProbeMatch
bericht teruggestuurd naar de client.
Objectmodel
De WCF Discovery-API definieert de volgende klassen:
AnnouncementClient
De AnnouncementClient klasse biedt synchrone en asynchrone methoden voor het verzenden van aankondigingsberichten. Er zijn twee soorten aankondigingsberichten, Hallo en Bye. Er wordt een Hallo-bericht verzonden om aan te geven dat er een service beschikbaar is en er een bye-bericht wordt verzonden om aan te geven dat een bestaande service niet meer beschikbaar is. De ontwikkelaar maakt een AnnouncementClient exemplaar, waarbij een instantie van AnnouncementEndpoint als constructorparameter wordt doorgegeven.
AnnouncementEndpoint
AnnouncementEndpoint vertegenwoordigt een standaardeindpunt met een vast aankondigingscontract. Het wordt gebruikt door een service of client om aankondigingsberichten te verzenden en te ontvangen. De klasse is standaard AnnouncementEndpoint ingesteld op het gebruik van de WS_Discovery 11-protocolversie.
AnnouncementService
AnnouncementService is een door het systeem geleverde implementatie van een aankondigingsservice die aankondigingsberichten ontvangt en verwerkt. Wanneer een Hello- of Bye-bericht wordt ontvangen, roept het AnnouncementService exemplaar de juiste virtuele methode OnBeginOnlineAnnouncement aan of OnBeginOfflineAnnouncement, die aankondigingsgebeurtenissen genereert.
DiscoveryClient
De DiscoveryClient klasse wordt door een clienttoepassing gebruikt om beschikbare services te zoeken en op te lossen. Het biedt synchrone en asynchrone methoden voor het vinden en oplossen van services op basis van de opgegeven FindCriteria en ResolveCriteria respectievelijk. De ontwikkelaar maakt een DiscoveryClient exemplaar en levert een exemplaar van DiscoveryEndpoint als constructorparameter.
Om een service te vinden, roept de ontwikkelaar de synchrone of asynchrone Find
methode aan, die een FindCriteria exemplaar biedt dat de zoekcriteria bevat die moeten worden gebruikt. Er DiscoveryClient wordt een Probe
bericht met de juiste headers gemaakt en de zoekaanvraag verzonden. Omdat er op elk moment meer dan één openstaande Find
aanvraag kan zijn, correleert de client de ontvangen antwoorden en valideert het antwoord. Vervolgens worden de resultaten aan de aanroeper van de Find
bewerking geleverd met behulp van FindResponse.
Om een bekende service op te lossen, roept de ontwikkelaar de synchrone of asynchrone Resolve
methode aan die een exemplaar van ResolveCriteria de EndpointAddress bekende service bevat. Het DiscoveryClient bericht wordt gemaakt Resolve
met de juiste headers en verzendt de aanvraag voor oplossen. Het ontvangen antwoord wordt gecorreleerd aan de openstaande oplossingsaanvragen en het resultaat wordt geleverd aan de beller van de Resolve
bewerking met behulp van ResolveResponse.
Als er een detectieproxy aanwezig is in het netwerk en de DiscoveryClient detectieaanvraag op multicast-wijze wordt verzonden, kan de detectieproxy reageren met het hello-bericht voor multicastonderdrukking. Hiermee DiscoveryClient wordt de ProxyAvailable
gebeurtenis gegenereerd wanneer er Hallo-berichten worden ontvangen als reactie op openstaande Find
aanvragen of Resolve
aanvragen. De ProxyAvailable
gebeurtenis bevat de EndpointDiscoveryMetadata informatie over de detectieproxy. Het is aan de ontwikkelaar om deze informatie te gebruiken om over te schakelen van ad-hoc naar beheerde modus.
DiscoveryEndpoint
DiscoveryEndpoint vertegenwoordigt een standaardeindpunt met een vast detectiecontract. Het wordt gebruikt door een service of client om detectieberichten te verzenden of te ontvangen. DiscoveryEndpoint Standaard is ingesteld op de gebruiksmodus ServiceDiscoveryMode.Managed en de WSDiscovery11 WS-Discovery-versie.
DiscoveryMessageSequenceGenerator
DiscoveryMessageSequenceGenerator wordt gebruikt om een DiscoveryMessageSequence genereren wanneer de service detectie- of aankondigingsberichten verzendt.
DiscoveryService
De DiscoveryService abstracte klasse biedt een framework voor het ontvangen en verwerken Probe
van berichten en Resolve
berichten. Wanneer een Probe
bericht wordt ontvangen, DiscoveryService maakt u een exemplaar van op basis van FindRequestContext het binnenkomende bericht en roept u de OnBeginFind virtuele methode aan. Wanneer een Resolve
bericht wordt ontvangen, DiscoveryService roept u de OnBeginResolve virtuele methode aan. U kunt deze klasse overnemen om een aangepaste Discovery Service-implementatie te bieden.
DiscoveryProxy
De DiscoveryProxy abstracte klasse biedt een framework voor het ontvangen en verwerken van detectie- en aankondigingsberichten. U neemt over van deze klasse wanneer u een aangepaste detectieproxy implementeert. Wanneer een Probe
bericht wordt ontvangen via multicast, roept de DiscoveryProxy klasse de BeginShouldRedirectFind
virtuele methode aan om te bepalen of een multicastonderdrukkingsbericht moet worden verzonden. Als de ontwikkelaar besluit geen multicastonderdrukkingsbericht te verzenden of als het Probe
bericht is ontvangen via unicast, wordt er een exemplaar van de FindRequestContext klasse gemaakt op basis van het binnenkomende bericht en wordt de OnBeginFind
virtuele methode aangeroepen. Wanneer een Resolve
bericht wordt ontvangen via multicast, roept de DiscoveryProxy klasse de ShouldRedirectResolve
virtuele methode aan om te bepalen of een multicastonderdrukkingsbericht moet worden verzonden. Als de ontwikkelaar besluit geen multicastonderdrukkingsbericht te verzenden of als het Resolve
bericht is ontvangen via unicast, wordt er een exemplaar van de ResolveCriteria klasse gemaakt op basis van het binnenkomende bericht en wordt de OnBeginResolve
virtuele methode aangeroepen. Wanneer een Hello- of Bye-bericht wordt ontvangen, DiscoveryProxy roept u de juiste virtuele methode (OnBeginOnlineAnnouncement
of OnBeingOfflineAnnouncement
) aan waarmee aankondigingsgebeurtenissen worden gegenereerd.
DiscoveryVersion
De DiscoveryVersion klasse vertegenwoordigt de detectieprotocolversie die moet worden gebruikt.
EndpointDiscoveryBehavior
De EndpointDiscoveryBehavior klasse wordt gebruikt om de detectie van een eindpunt te beheren, de extensies op te geven, extra contracttypenamen op te geven. en de bereiken die aan dat eindpunt zijn gekoppeld. Dit gedrag wordt toegevoegd aan een toepassingseindpunt om het EndpointDiscoveryMetadatabijbehorende te configureren. Wanneer ServiceDiscoveryBehavior deze wordt toegevoegd aan de servicehost, worden alle toepassingseindpunten die door de servicehost worden gehost standaard detecteerbaar. De ontwikkelaar kan detectie voor een specifiek eindpunt uitschakelen door de Enabled eigenschap in te stellen op false
.
EndpointDiscoveryMetadata
De EndpointDiscoveryMetadata klasse biedt een versie-onafhankelijke weergave van een eindpunt dat door de service is gepubliceerd. Het bevat eindpuntadressen, luister-URI's, contracttypenamen, bereiken, metagegevensversie en extensies die zijn opgegeven door de serviceontwikkelaar. De FindCriteria verzonden door de client tijdens een Probe
bewerking wordt vergeleken met de EndpointDiscoveryMetadata. Als de criteria overeenkomen, wordt de EndpointDiscoveryMetadata waarde geretourneerd aan de client. Het eindpuntadres in ResolveCriteria komt overeen met het eindpuntadres van EndpointDiscoveryMetadata. Als de criteria overeenkomen, wordt de EndpointDiscoveryMetadata waarde geretourneerd aan de client.
FindCriteria
De FindCriteria klasse is een versie-onafhankelijke klasse die wordt gebruikt om de criteria op te geven die worden gebruikt bij het zoeken naar een service. Het biedt volledige ondersteuning voor de WS-Discovery-gedefinieerde criteria voor overeenkomende services. Het bevat ook extensies die ontwikkelaars kunnen gebruiken om aangepaste waarden op te geven die kunnen worden gebruikt tijdens het overeenkomende proces. De ontwikkelaar kan de beëindigingscriteria voor de Find
bewerking opgeven door de MaxResults, waarmee het totale aantal services wordt opgegeven dat de ontwikkelaar zoekt of die de Durationwaarde aangeeft die aangeeft hoe lang de client wacht op antwoorden.
FindRequestContext
De FindRequestContext klasse wordt geïnstantieerd door de detectieservice op basis van het Probe
bericht dat deze ontvangt wanneer een client een Find
bewerking start. Het bevat een exemplaar van FindCriteria dat is opgegeven door de client.
FindResponse
De FindResponse klasse wordt geretourneerd naar de aanroeper van Find met de antwoorden van de Find
bewerking. Het is ook aanwezig in FindCompletedEventArgs. Het bevat een verzameling , die de verzameling EndpointDiscoveryMetadatavan gedetecteerde eindpunten en een woordenlijst van EndpointDiscoveryMetadata en DiscoveryMessageSequence.
ResolveCriteria
De ResolveCriteria klasse is een versie-onafhankelijke klasse die wordt gebruikt om de criteria op te geven die worden gebruikt bij het oplossen van een al bekende service. Het bevat het eindpuntadres van de bekende service. De ontwikkelaar kan de beëindigingscriteria voor de oplossingsbewerking opgeven door de Duration, die aangeeft hoe lang de client wacht op antwoorden.
ResolveResponse
De ResolveResponse aanroeper van de Resolve methode wordt geretourneerd met het antwoord van de Resolve
bewerking. Het is ook aanwezig in ResolveCompletedEventArgs. Het bevat een exemplaar van EndpointDiscoveryMetadata, de gedetecteerde eindpunten en een exemplaar van DiscoveryMessageSequence.
ServiceDiscoveryBehavior
Met ServiceDiscoveryBehavior de klasse kan de ontwikkelaar de detectiefunctie toevoegen aan een service. U voegt dit gedrag toe aan de ServiceHost. De ServiceDiscoveryBehavior klasse doorloopt de toepassingseindpunten die zijn toegevoegd aan de servicehost en maakt een verzameling van EndpointDiscoveryMetadata de detecteerbare eindpunten. Alle eindpunten zijn standaard detecteerbaar. De detectie van een bepaald eindpunt kan worden beheerd door het EndpointDiscoveryBehavior toe te voegen aan dat specifieke eindpunt. Als er aankondigingseindpunten aan worden toegevoegd ServiceDiscoveryBehavior , wordt de aankondiging van alle detecteerbare eindpunten verzonden via elk van de aankondigingseindpunten wanneer de servicehost wordt geopend of gesloten.
UdpAnnouncementEndpoint
De UdpAnnouncementEndpoint klasse is een standaardaankondigingseindpunt dat vooraf is geconfigureerd voor aankondiging via een UDP multicast-binding. UdpAnnouncementEndpoint Standaard wordt de WSApril2005-WS_Discovery versie gebruikt.
UdpDiscoveryEndpoint
De UdpDiscoveryEndpoint klasse is een standaarddetectie-eindpunt dat vooraf is geconfigureerd voor detectie via een UDP multicast-binding. DiscoveryEndpoint Standaard is ingesteld op het gebruik van de WSDiscovery11 WS-Discovery-versie en ServiceDiscoveryMode.Adhoc -modus.