Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
WCF Discovery besteht aus einer Reihe von Typen, die ein einheitliches Programmiermodell bereitstellen, mit dem Sie Dienste schreiben können, die zur Laufzeit auffindbar sind, und Clients, die diese Dienste suchen und verwenden.
Erstellen eines auffindbaren Diensts und Suchen von Diensten
Um einen WCF-Dienst auffindbar zu machen, fügen Sie einen ServiceDiscoveryBehavior dem ServiceDescription des Diensthosts hinzu und fügen Sie einen Discovery-Endpunkt hinzu. Wenn ein Dienst so konfiguriert ist, dass Ankündigungsnachrichten (durch Hinzufügen einer AnnouncementEndpoint) gesendet werden, wird die Ankündigung gesendet, wenn der Diensthost geöffnet und geschlossen wird.
Ein Client, der auf Dienstankündigungsnachrichten lauschen möchte, hostet einen Ankündigungsdienst und fügt einen oder mehrere Ankündigungsendpunkte hinzu. Der Ankündigungsdienst empfängt Ankündigungsnachrichten und löst Ankündigungsereignisse aus.
Ein Client verwendet die DiscoveryClient Klasse, um nach verfügbaren Diensten zu suchen. Die Clientanwendung instanziiert die DiscoveryClient Klasse, indem sie einen Discovery-Endpunkt übergibt, der angibt, wohin Discovery-Nachrichten gesendet werden sollen. Der Client ruft die Find Methode auf, die eine Probe Anforderung sendet. Dienste, die eine Überwachung auf Suchnachrichten durchführen, empfangen diese Probe-Anforderung. Wenn der Dienst den in der ProbeDatei angegebenen Kriterien entspricht, sendet er eine ProbeMatch Nachricht zurück an den Client.
Objektmodell
Die WCF Discovery-API definiert die folgenden Klassen:
AnnouncementClient
Die AnnouncementClient Klasse stellt synchrone und asynchrone Methoden zum Senden von Ankündigungsnachrichten bereit. Es gibt zwei Arten von Ankündigungsnachrichten, Hello und Bye. Eine Hello-Nachricht wird gesendet, um anzugeben, dass ein Dienst verfügbar wurde und eine Bye-Nachricht gesendet wird, um anzugeben, dass ein vorhandener Dienst nicht mehr verfügbar ist. Der Entwickler erstellt eine AnnouncementClient-Instanz, indem er eine Instanz von AnnouncementEndpoint als Konstruktorparameter übergibt.
AnnouncementEndpoint
AnnouncementEndpoint stellt einen Standardendpunkt mit einem festen Ankündigungsvertrag dar. Es wird von einem Dienst oder Client zum Senden und Empfangen von Ankündigungsnachrichten verwendet. Standardmäßig ist die AnnouncementEndpoint Klasse so festgelegt, dass die WS_Discovery 11-Protokollversion verwendet wird.
Ankündigungsdienst
AnnouncementService ist eine vom System bereitgestellte Implementierung eines Ankündigungsdiensts, der Ankündigungsmeldungen empfängt und verarbeitet. Wenn eine Hello- oder Bye-Nachricht empfangen wird, ruft die AnnouncementService Instanz die entsprechende virtuelle Methode OnBeginOnlineAnnouncement oder OnBeginOfflineAnnouncement auf, wodurch Ankündigungsereignisse ausgelöst werden.
DiscoveryClient
Die DiscoveryClient Klasse wird von einer Clientanwendung verwendet, um verfügbare Dienste zu finden und aufzulösen. Sie stellt synchrone und asynchrone Methoden zum Suchen nach und zum Auflösen von Diensten bereit, die auf dem angegebenen FindCriteria-Objekt oder ResolveCriteria-Objekt basieren. Der Entwickler erstellt eine DiscoveryClient Instanz und stellt eine Instanz DiscoveryEndpoint als Konstruktorparameter bereit.
Um einen Dienst zu finden, ruft der Entwickler die synchrone oder asynchrone Find Methode auf, die eine FindCriteria Instanz bereitstellt, die die zu verwendenden Suchkriterien enthält. Das DiscoveryClient-Objekt erstellt eine Probe-Nachricht mit den entsprechenden Headern und sendet die Suchanforderung. Da es jederzeit mehrere ausstehende Find Anforderungen geben kann, korreliert der Client die empfangenen Antworten und überprüft die Antwort. Anschließend werden die Ergebnisse mithilfe von Find an den Aufrufer des FindResponse Vorgangs übermittelt.
Um einen bekannten Dienst aufzulösen, ruft der Entwickler die synchrone oder asynchrone Resolve Methode auf, die eine Instanz von ResolveCriteria bereitstellt, die das EndpointAddress des bekannten Dienstes enthält. Die DiscoveryClient erzeugt die Resolve Nachricht mit den entsprechenden Kopfzeilen und sendet die Auflösungsanforderung. Die empfangene Antwort wird mit den ausstehenden Auflösungsanforderungen korreliert, und das Ergebnis wird mithilfe von Resolve an den Aufrufer des ResolveResponse-Vorgangs übermittelt.
Wenn im Netzwerk ein Suchproxy vorhanden ist und der DiscoveryClient die Suchanforderung im Multicastformat sendet, kann der Suchproxy per Multicastunterdrückung mit Hello-Nachricht antworten. Das DiscoveryClient löst das ProxyAvailable Ereignis aus, wenn es Hello-Nachrichten als Reaktion auf ausstehende Find- oder Resolve-Anfragen erhält. Das ProxyAvailable-Ereignis enthält die EndpointDiscoveryMetadata zum Suchproxy. Der Entwickler muss diese Informationen verwenden, um vom Ad-hoc-Modus zum verwalteten Modus zu wechseln.
DiscoveryEndpoint
DiscoveryEndpoint stellt einen Standardendpunkt mit einem festen Ermittlungsvertrag dar. Sie wird von einem Dienst oder Client zum Senden oder Empfangen von Discoverynachrichten verwendet. Standardmäßig ist DiscoveryEndpoint so eingestellt, dass es den ServiceDiscoveryMode.Managed-Modus und die WSDiscovery11-WS-Discovery-Version verwendet.
DiscoveryMessageSequenceGenerator
DiscoveryMessageSequenceGenerator wird verwendet, um ein DiscoveryMessageSequence zu erstellen, während der Dienst Discovery- oder Ankündigungsnachrichten sendet.
DiscoveryService
Die DiscoveryService abstrakte Klasse stellt ein Framework zum Empfangen und Verarbeiten von Probe- und Resolve-Nachrichten bereit. Wenn eine Probe Nachricht empfangen wird, erstellt DiscoveryService eine Instanz FindRequestContext basierend auf der eingehenden Nachricht und ruft die virtuelle Methode OnBeginFind auf. Wenn eine Resolve Nachricht empfangen wird, ruft DiscoveryService die virtuelle Methode OnBeginResolve auf. Sie können von dieser Klasse erben, um eine benutzerdefinierte Discovery Service-Implementierung bereitzustellen.
DiscoveryProxy
Die DiscoveryProxy abstrakte Klasse bietet ein Framework zum Empfangen und Verarbeiten von Erkennungs- und Ankündigungsnachrichten. Sie erben von dieser Klasse, wenn Sie einen benutzerdefinierten Discoveryproxy implementieren. Wenn eine Probe Nachricht über Multicast empfangen wird, ruft die DiscoveryProxy Klasse die BeginShouldRedirectFind virtuelle Methode auf, um zu bestimmen, ob eine Multicastunterdrückungsnachricht gesendet werden soll. Wenn der Entwickler entscheidet, keine Multicastunterdrückungsnachricht zu senden oder wenn die Probe Nachricht über Unicast empfangen wurde, wird eine Instanz der FindRequestContext Klasse basierend auf der eingehenden Nachricht erstellt und die OnBeginFind virtuelle Methode aufgerufen. Wenn eine Resolve Nachricht über Multicast empfangen wird, ruft die DiscoveryProxy Klasse die ShouldRedirectResolve virtuelle Methode auf, um zu bestimmen, ob eine Multicastunterdrückungsnachricht gesendet werden soll. Wenn der Entwickler entscheidet, keine Multicastunterdrückungsnachricht zu senden oder wenn die Resolve Nachricht über Unicast empfangen wurde, wird eine Instanz der ResolveCriteria Klasse basierend auf der eingehenden Nachricht erstellt und die OnBeginResolve virtuelle Methode aufgerufen. Wenn eine Hello- oder Bye-Nachricht empfangen wird, ruft DiscoveryProxy die entsprechende virtuelle Methode (OnBeginOnlineAnnouncement oder OnBeingOfflineAnnouncement) auf, welche Ankündigungsereignisse auslöst.
DiscoveryVersion
Die DiscoveryVersion Klasse stellt die zu verwendende Discoveryprotokollversion dar.
EndpointDiscoveryBehavior
Die EndpointDiscoveryBehavior Klasse wird verwendet, um die Auffindbarkeit eines Endpunkts zu steuern, die Erweiterungen, zusätzliche Vertragstypnamen anzugeben. und die dem Endpunkt zugeordneten Bereiche anzugeben. Dieses Verhalten wird einem Anwendungsendpunkt hinzugefügt, um dessen EndpointDiscoveryMetadata zu konfigurieren. Wenn ServiceDiscoveryBehavior dem Diensthost hinzugefügt wird, werden alle Anwendungsendpunkte des Diensthosts standardmäßig auffindbar. Der Entwickler kann die Ermittlung für einen bestimmten Endpunkt deaktivieren, indem er die Enabled Eigenschaft auf false setzt.
EndpointDiscoveryMetadata
Die EndpointDiscoveryMetadata Klasse stellt eine versionsunabhängige Darstellung eines vom Dienst veröffentlichten Endpunkts bereit. Sie enthält Endpunktadressen, Listen-URIs, Vertragstypnamen, Bereiche, Metadatenversion und Erweiterungen, die vom Dienstentwickler angegeben werden. Das vom Client während eines FindCriteria-Vorgangs gesendete Probe-Objekt wid mit dem EndpointDiscoveryMetadata-Objekt verglichen. Wenn die Kriterien übereinstimmen, wird das EndpointDiscoveryMetadata-Objekt an den Client zurückgegeben. Die Endpunktadresse in ResolveCriteria wird mit der Endpunktadresse von EndpointDiscoveryMetadata abgeglichen. Wenn die Kriterien übereinstimmen, wird das EndpointDiscoveryMetadata-Objekt an den Client zurückgegeben.
Suchkriterien
Die FindCriteria Klasse ist eine versionsunabhängige Klasse, die zum Angeben der Kriterien verwendet wird, die beim Suchen eines Diensts verwendet werden. Es unterstützt vollständig die von WS-Discovery definierten Kriterien für übereinstimmende Dienste. Es verfügt auch über Erweiterungen, mit denen Entwickler benutzerdefinierte Werte angeben können, die während des Abgleichsvorgangs verwendet werden können. Der Entwickler kann die Beendigungskriterien für den Find Vorgang angeben, indem er die MaxResultsGesamtanzahl der dienste angibt, nach denen der Entwickler sucht, oder der den Wert angibt, der Durationangibt, wie lange der Client auf Antworten wartet.
FindRequestContext
Die FindRequestContext Klasse wird vom Ermittlungsdienst basierend auf der Probe empfangenen Nachricht instanziiert, wenn ein Client einen Find Vorgang initiiert. Sie enthält eine vom Kunden angegebene Instanz von FindCriteria.
FindResponse
Die FindResponse Klasse wird mit den Antworten des Find Vorgangs an den Aufrufer Find zurückgegeben. Es ist auch vorhanden in FindCompletedEventArgs. Es enthält eine Sammlung von EndpointDiscoveryMetadata, welche die ermittelten Endpunkte sowie ein Wörterbuch von EndpointDiscoveryMetadata und DiscoveryMessageSequence umfasst.
ResolveCriteria
Die ResolveCriteria Klasse ist eine versionsunabhängige Klasse, die verwendet wird, um die Kriterien anzugeben, die beim Auflösen eines bereits bekannten Diensts verwendet werden. Sie enthält die Endpunktadresse des bekannten Diensts. Der Entwickler kann die Beendigungskriterien für den Auflösungsvorgang angeben, indem er Durationangibt, wie lange der Client auf Antworten wartet.
ResolveResponse
Das ResolveResponse-Objekt wird mit der Antwort des Resolve-Vorgangs an den Aufrufer der Resolve-Methode zurückgegeben. Es ist auch vorhanden in ResolveCompletedEventArgs. Es enthält eine Instanz von EndpointDiscoveryMetadata, die die ermittelten Endpunkte sowie eine Instanz von DiscoveryMessageSequence umfasst.
ServiceDiscoveryBehavior
Die ServiceDiscoveryBehavior Klasse ermöglicht es dem Entwickler, das Ermittlungsfeature einem Dienst hinzuzufügen. Sie fügen dieses Verhalten dem ServiceHost-Objekt hinzu. Die ServiceDiscoveryBehavior Klasse durchläuft die Anwendungsendpunkte, die dem Diensthost hinzugefügt wurden, und erstellt eine Sammlung von EndpointDiscoveryMetadata aus den auffindbaren Endpunkten. Alle Endpunkte sind standardmäßig auffindbar. Die Auffindbarkeit eines bestimmten Endpunkts kann durch Hinzufügen von EndpointDiscoveryBehavior zu diesem Endpunkt gesteuert werden. Werden Ankündigungsendpunkte zu ServiceDiscoveryBehavior hinzugefügt, wird bei Öffnung oder Schließung des Servicehosts die Ankündigung aller auffindbaren Endpunkte über jeden der Ankündigungsendpunkte gesendet.
UdpAnnouncementEndpoint
Die UdpAnnouncementEndpoint Klasse ist ein Standardankündigungsendpunkt, der für Ankündigungen über eine UDP-Multicastbindung vorkonfiguriert ist. Standardmäßig ist UdpAnnouncementEndpoint auf die Verwendung der WSApril2005-WS_Discovery-Version festgelegt.
UdpDiscoveryEndpoint
Die UdpDiscoveryEndpoint Klasse ist ein Standardmäßiger Ermittlungsendpunkt, der für die Ermittlung über eine UDP-Multicastbindung vorkonfiguriert ist. Standardmäßig ist DiscoveryEndpoint auf die Verwendung von WSDiscovery11 WS-Discovery-Version und den ServiceDiscoveryMode.Adhoc-Modus festgelegt.