Objektmodell der WCF-SucheWCF Discovery Object Model

Die WCF-Suche besteht aus einem Satz von Typen, die zusammen ein einheitliches Programmiermodell bereitstellen. Damit können Sie Dienste schreiben, die zur Laufzeit erkennbar sind, sowie Clients, die nach diesen Diensten suchen und diese verwenden.WCF Discovery consists of a set of types that provide a unified programming model that allows you to write services that are discoverable at runtime and clients that find and use these services.

Erkennbarmachen eines Diensts und Suchen nach DienstenMaking a Service Discoverable and Finding Services

Um einen WCF-Dienst erkennbar zu machen, fügen Sie dem ServiceDiscoveryBehavior-Objekt des Diensthosts ein ServiceDescription sowie einen Suchendpunkt hinzu.To make a WCF service discoverable, add a ServiceDiscoveryBehavior to the ServiceDescription of the service host and add a discovery endpoint. Wenn ein Dienst so konfiguriert wird, dass er Ankündigungsnachrichten sendet (durch das Hinzufügen eines AnnouncementEndpoint-Objekts), wird die Ankündigung jeweils gesendet, wenn der Diensthost geöffnet oder geschlossen wird.If a service is configured to send announcement messages (by adding an AnnouncementEndpoint) the announcement is sent when the service host is opened and closed.

Ein Client, der eine Überwachung auf Ankündigungsnachrichten von Diensten durchführt, hostet einen Ankündigungsdienst und fügt einen oder mehrere Ankündigungsendpunkte hinzu.A client that wants to listen for service announcement messages hosts an announcement service and adds one or more announcement endpoints. Der Ankündigungsdienst empfängt Ankündigungsnachrichten und löst Ankündigungsereignisse aus.The announcement service receives announcement messages and raises announcement events.

Ein Client verwendet die DiscoveryClient-Klasse, um nach verfügbaren Diensten zu suchen.A client uses the DiscoveryClient class to search for available services. Die Clientanwendung instanziiert die DiscoveryClient-Klasse, indem sie einen Suchendpunkt übergibt. Dieser Suchendpunkt gibt an, wohin die Suchnachrichten gesendet werden sollen.The client application instantiates the DiscoveryClient class, passing in a discovery endpoint that specifies where to send discovery messages. Der Client ruft die Find-Methode auf, die eine Probe-Anforderung sendet.The client calls the Find method, which sends a Probe request. Dienste, die eine Überwachung auf Suchnachrichten durchführen, empfangen diese Probe-Anforderung.Services listening for discovery messages receive this Probe request. Falls der Dienst die unter Probe angegebenen Kriterien erfüllt, sendet er eine ProbeMatch-Nachricht zurück an den Client.If the service matches the criteria specified in the Probe, it sends a ProbeMatch message back to the client.

ObjektmodellObject Model

Die API der WCF-Suche definiert die folgenden Klassen:The WCF Discovery API defines the following classes:

AnnouncementClientAnnouncementClient

Die AnnouncementClient-Klasse stellt synchrone und asynchrone Methoden zum Senden von Ankündigungsnachrichten bereit.The AnnouncementClient class provides synchronous and asynchronous methods for sending announcement messages. Es gibt zwei Typen von Ankündigungsnachrichten: "Hello" und "Bye".There are two types of announcement messages, Hello and Bye. Eine Hello-Nachricht wird gesendet, um anzugeben, dass ein Dienst verfügbar geworden ist, und eine Bye-Nachricht wird gesendet, um anzugeben, dass ein vorhandener Dienst nicht mehr verfügbar ist.A Hello message is sent to indicate that a service has become available and a Bye message is sent to indicate that an existing service has become unavailable. Der Entwickler erstellt eine AnnouncementClient-Instanz und übergibt eine Instanz von AnnouncementEndpoint als Konstruktorparameter.The developer creates an AnnouncementClient instance, passing an instance of AnnouncementEndpoint as a constructor parameter.

AnnouncementEndpointAnnouncementEndpoint

AnnouncementEndpoint stellt einen Standardendpunkt mit einem festen Ankündigungsvertrag dar.AnnouncementEndpoint represents a standard endpoint with a fixed announcement contract. Dieser wird von einem Dienst oder Client zum Senden und Empfangen von Ankündigungsnachrichten verwendet.It is used by a service or client to send and receive announcement messages. Standardmäßig ist für die AnnouncementEndpoint-Klasse festgelegt, dass sie die Protokollversion "WS_Discovery 11" verwendet.By default, the AnnouncementEndpoint class is set to use the WS_Discovery 11 protocol version.

AnnouncementServiceAnnouncementService

AnnouncementService ist eine vom System bereitgestellte Implementierung eines Ankündigungsdiensts, der Ankündigungsnachrichten empfängt und verarbeitet.AnnouncementService is a system-provided implementation of an announcement service that receives and processes announcement messages. Wenn eine Hello- oder Bye-Nachricht empfangen wird, ruft die AnnouncementService-Instanz die entsprechende virtuelle OnBeginOnlineAnnouncement- oder OnBeginOfflineAnnouncement-Methode auf, die Ankündigungsereignisse auslös.When a Hello or Bye message is received, the AnnouncementService instance calls the appropriate virtual method OnBeginOnlineAnnouncement or OnBeginOfflineAnnouncement, which raises announcement events.

DiscoveryClientDiscoveryClient

Die DiscoveryClient-Klasse wird von einer Clientanwendung verwendet, um verfügbare Dienste zu suchen und aufzulösen.The DiscoveryClient class is used by a client application to find and resolve available services. 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.It provides synchronous and asynchronous methods for finding and resolving services based on the specified FindCriteria and ResolveCriteria respectively. Der Entwickler erstellt eine DiscoveryClient-Instanz und stellt eine Instanz von DiscoveryEndpoint als Konstruktorparameter bereit.The developer creates a DiscoveryClient instance and provides an instance of DiscoveryEndpoint as a constructor parameter.

Zum Suchen nach einem Dienst ruft der Entwickler die synchrone oder asynchrone Find -Methode, die eine FindCriteria Instanz, die die zu verwendenden Suchkriterien enthält.To find a service, the developer invokes the synchronous or asynchronous Find method, which provides a FindCriteria instance that contains the search criteria to use. Das DiscoveryClient-Objekt erstellt eine Probe-Nachricht mit den entsprechenden Headern und sendet die Suchanforderung.The DiscoveryClient creates a Probe message with the appropriate headers, and sends the find request. Da es gleichzeitig mehr als eine ausstehende Find-Anforderung geben kann, korreliert der Client die empfangenen Antworten und überprüft jeweils die Antwort.Because there can be more than one outstanding Find request at any time, the client correlates the received responses and validates the response. Anschließend werden die Ergebnisse mithilfe von Find an den Aufrufer des FindResponse-Vorgangs übermittelt.It then delivers the results to the caller of the Find operation using FindResponse.

Um einen bekannten Dienst aufzulösen, ruft der Entwickler die synchrone oder asynchrone Resolve -Methode, die eine Instanz von ResolveCriteria , enthält die EndpointAddress des bekannten Diensts.To resolve a known service, the developer invokes the synchronous or asynchronous Resolve method that provides an instance of ResolveCriteria that contains the EndpointAddress of the known service. Das DiscoveryClient-Objekt erstellt eine Resolve-Nachricht mit den entsprechenden Headern und sendet die Auflösungsanforderung.The DiscoveryClient creates the Resolve message with the appropriate headers and sends the resolve request. Die empfangene Antwort wird mit den ausstehenden Auflösungsanforderungen korreliert, und das Ergebnis wird mithilfe von Resolve an den Aufrufer des ResolveResponse-Vorgangs übermittelt.The received response is correlated against the outstanding resolve requests and the result is delivered to the caller of the Resolve operation using ResolveResponse.

Wenn ein suchproxy im Netzwerk vorhanden ist und die DiscoveryClient sendet, die die Ermittlung anfordern im multicast-Format, der suchproxy mit Hello multicastunterdrückungsmeldungen reagieren kann.If a discovery proxy is present on the network and the DiscoveryClient sends the discovery request in a multicast fashion, the discovery proxy can respond with the multicast suppression Hello message. Die DiscoveryClient löst die ProxyAvailable Ereignis, wenn er Hello-Nachrichten als Antwort auf ausstehende empfängt Find oder Resolve Anforderungen.The DiscoveryClient raises the ProxyAvailable event when it receives Hello messages in response to outstanding Find or Resolve requests. Das ProxyAvailable-Ereignis enthält die EndpointDiscoveryMetadata zum Suchproxy.The ProxyAvailable event contains the EndpointDiscoveryMetadata about the discovery proxy. Der Entwickler kann entscheiden, ob er diese Informationen zum Wechseln vom Ad-hoc-Modus in den Modus "Verwaltet" verwendet.It is up to the developer to use this information to switch from Ad hoc to Managed mode.

DiscoveryEndpointDiscoveryEndpoint

DiscoveryEndpoint stellt einen Standardendpunkt mit einem festen Suchvertrag dar.DiscoveryEndpoint represents a standard endpoint with a fixed discovery contract. Er wird von einem Dienst oder einem Client verwendet, um Suchnachrichten zu senden oder zu empfangen.It is used by a service or client to send or receive discovery messages. Standardmäßig DiscoveryEndpoint ist so festgelegt, Managed Modus und die Version "wsdiscovery11" WS-Discovery.By default, DiscoveryEndpoint is set to use Managed mode and the WSDiscovery11 WS-Discovery version.

DiscoveryMessageSequenceGeneratorDiscoveryMessageSequenceGenerator

DiscoveryMessageSequenceGenerator wird verwendet, um ein DiscoveryMessageSequence-Objekt zu generieren, wenn der Dienst Such- oder Ankündigungsnachrichten sendet.DiscoveryMessageSequenceGenerator is used to generate a DiscoveryMessageSequence when the service is sending out Discovery or Announcement messages.

DiscoveryServiceDiscoveryService

Die abstrakte DiscoveryService-Klasse stellt ein Framework zum Empfangen und Verarbeiten von Probe- und Resolve-Nachrichten bereit.The DiscoveryService abstract class provides a framework for receiving and processing Probe and Resolve messages. Wenn eine Probe-Nachricht empfangen wird, erstellt DiscoveryService basierend auf der eingehenden Meldung eine Instanz von FindRequestContext und ruft die virtuelle OnBeginFind-Methode auf.When a Probe message is received, DiscoveryService creates an instance of FindRequestContext based on the incoming message and invokes the OnBeginFind virtual method. Wenn eine Resolve-Nachricht empfangen wird, ruft DiscoveryService die virtuelle OnBeginResolve-Methode auf.When a Resolve message is received, DiscoveryService invokes the OnBeginResolve virtual method. Sie können von dieser Klasse erben, um eine benutzerdefinierte Suchdienstimplementierung bereitzustellen.You can inherit from this class to provide a custom Discovery Service implementation.

DiscoveryProxyDiscoveryProxy

Die abstrakte DiscoveryProxy-Klasse stellt ein Framework zum Empfangen und Verarbeiten von Suche- und Ankündigungsnachrichten bereit.The DiscoveryProxy abstract class provides a framework for receiving and processing discovery and announcement messages. Sie erben von dieser Klasse, wenn Sie einen benutzerdefinierten Suchproxy implementieren.You inherit from this class when you are implementing a custom discovery proxy. Wenn eine Probe-Nachricht per Multicast empfangen wird, ruft die DiscoveryProxy-Klasse die virtuelle BeginShouldRedirectFind-Methode auf, um zu ermitteln, ob eine Multicastunterdrückungsnachricht gesendet werden soll.When a Probe message is received over multicast, the DiscoveryProxy class calls the BeginShouldRedirectFind virtual method to determine whether a multicast suppression message should to be sent. Wenn sich der Entwickler gegen das Senden einer Multicastunterdrückungsnachricht entscheidet oder wenn die Probe-Nachricht per Unicast empfangen wurde, wird basierend auf der eingehenden Nachricht eine Instanz der FindRequestContext-Klasse erstellt und die virtuelle OnBeginFind-Methode aufgerufen.If the developer decides not to send a multicast suppression message or if the Probe message was received over unicast, it creates an instance of the FindRequestContext class based on the incoming message and invokes the OnBeginFind virtual method. Wenn eine Resolve-Nachricht per Multicast empfangen wird, ruft die DiscoveryProxy-Klasse die virtuelle ShouldRedirectResolve-Methode auf, um zu ermitteln, ob eine Multicastunterdrückungsnachricht gesendet werden soll.When a Resolve message is received over multicast, The DiscoveryProxy class calls the ShouldRedirectResolve virtual method to determine whether a multicast suppression message should to be sent. Wenn sich der Entwickler gegen das Senden einer Multicastunterdrückungsnachricht entscheidet oder wenn die Resolve-Nachricht per Unicast empfangen wurde, wird basierend auf der eingehenden Nachricht eine Instanz der ResolveCriteria-Klasse erstellt und die virtuelle OnBeginResolve-Methode aufgerufen.If the developer decides not to send a multicast suppression message or if the Resolve message was received over unicast, it creates an instance of the ResolveCriteria class based on the incoming message and invokes the OnBeginResolve virtual method. Wenn eine Hello- oder Bye-Nachricht empfangen wird, ruft DiscoveryProxy die entsprechende virtuelle Methode (OnBeginOnlineAnnouncement oder OnBeingOfflineAnnouncement) auf, die Ankündigungsereignisse auslöst.When a Hello or Bye message is received, DiscoveryProxy calls the appropriate virtual method (OnBeginOnlineAnnouncement or OnBeingOfflineAnnouncement), which raises announcement events.

DiscoveryVersionDiscoveryVersion

Die DiscoveryVersion-Klasse stellt die zu verwendende Suchprotokollversion dar.The DiscoveryVersion class represents the discovery protocol version to use.

EndpointDiscoveryBehaviorEndpointDiscoveryBehavior

Die EndpointDiscoveryBehavior-Klasse wird verwendet, um die Ermittelbarkeit eines Endpunkts zu steuern und um die Erweiterungen, zusätzliche VertragstypnamenThe EndpointDiscoveryBehavior class is used to control the discoverability of an endpoint, specify the extensions, additional contract type names. und die dem Endpunkt zugeordneten Bereiche anzugeben.and the scopes associated with that endpoint. Dieses Verhalten wird einem Anwendungsendpunkt hinzugefügt, um seine EndpointDiscoveryMetadata zu konfigurieren.This behavior is added to an application endpoint to configure its EndpointDiscoveryMetadata. Wenn das ServiceDiscoveryBehavior dem Diensthost hinzugefügt wird, werden alle vom Diensthost gehosteten Anwendungsendpunkte standardmäßig erkennbar.When ServiceDiscoveryBehavior is added to the service host, all the application endpoints hosted by the service host by default become discoverable. Entwickler kann deaktivieren, Ermittlung für einen bestimmten Endpunkt durch Festlegen der Enable Eigenschaft false.The developer can turn off discovery for a specific endpoint by setting the Enable property to false.

EndpointDiscoveryMetadataEndpointDiscoveryMetadata

Die EndpointDiscoveryMetadata-Klasse stellt eine versionsunabhängige Darstellung eines Endpunkts bereit, der vom Dienst veröffentlicht wurde.The EndpointDiscoveryMetadata class provides a version-independent representation of an endpoint published by the service. Sie enthält Endpunktadressen, Abhör-URIs, Vertragstypnamen, Bereiche, Metadatenversion und Erweiterungen, die vom Dienstentwickler angegeben wurden.It contains endpoint addresses, listen URIs, contract type names, scopes, metadata version and extensions specified by the service developer. Das vom Client während eines FindCriteria-Vorgangs gesendete Probe-Objekt wid mit dem EndpointDiscoveryMetadata-Objekt verglichen.The FindCriteria sent by the client during a Probe operation is matched against the EndpointDiscoveryMetadata. Wenn die Kriterien übereinstimmen, wird das EndpointDiscoveryMetadata-Objekt an den Client zurückgegeben.If the criteria matches, then the EndpointDiscoveryMetadata is returned to the client. Die Endpunktadresse in ResolveCriteria wird mit der Endpunktadresse von EndpointDiscoveryMetadata verglichen.The endpoint address in ResolveCriteria is matched against the endpoint address of EndpointDiscoveryMetadata. Wenn die Kriterien übereinstimmen, wird das EndpointDiscoveryMetadata-Objekt an den Client zurückgegeben.If the criteria matches, then the EndpointDiscoveryMetadata is returned to the client.

FindCriteriaFindCriteria

Die FindCriteria-Klasse ist eine versionsunabhängige Klasse, mit der die Kriterien angegeben werden, die beim Suchen nach einem Dienst verwendet werden.The FindCriteria class is a version-independent class used to specify the criteria used when finding a service. Sie bietet eine vollständige Unterstützung der von der WS-Suche definierten Kriterien zum Vergleichen von Diensten.It fully supports the WS-Discovery-defined criteria for matching services. Außerdem verfügt sie über Erweiterungen, mit denen Entwickler benutzerdefinierte Werte angeben können, die während des Prozesses zur Ermittlung von Übereinstimmungen verwendet werden.It also has extensions that developers can use to specify custom values that can be used during the matching process. Der Entwickler kann die Beendigungskriterien für Bereitstellen der Find Vorgang durch Angabe der MaxResult, gibt die Gesamtzahl der Dienste, die der Entwickler sucht, oder, die angibt, an der Duration, also die Wert, der angibt, wie lange der Client auf Antworten wartet.The developer can provide the termination criteria for the Find operation by specifying the MaxResult, which specifies the total number of services the developer is looking for or that specifies the Duration, which is the value that specifies how long the client waits for responses.

FindRequestContextFindRequestContext

Die FindRequestContext-Klasse wird vom Suchdienst basierend auf der Probe-Nachricht instanziiert, die diese empfängt, wenn ein Client einen Find-Vorgang initiiert.The FindRequestContext class is instantiated by the discovery service based on the Probe message it receives when a client initiates a Find operation. Sie enthält eine Instanz des FindCriteria-Objekts, das vom Client angegeben wurde.It contains an instance of FindCriteria that was specified by the client.

FindResponseFindResponse

Die FindResponse-Klasse wird an den Aufrufer von Find mit den Antworten des Find-Vorgangs zurückgegeben.The FindResponse class is returned to the caller of Find with the responses of the Find operation. Sie ist auch in FindCompletedEventArgs enthalten.It is also present in FindCompletedEventArgs. Darin ist eine Auflistung von EndpointDiscoveryMetadata, wobei es sich um die Auflistung ermittelter Endpunkte und ein Wörterbuch für EndpointDiscoveryMetadata und DiscoveryMessageSequence handelt.It contains a collection of EndpointDiscoveryMetadata, which is the collection of discovered endpoints and a dictionary of EndpointDiscoveryMetadata and DiscoveryMessageSequence.

ResolveCriteriaResolveCriteria

Die ResolveCriteria-Klasse ist eine versionsunabhängige Klasse, mit der die Kriterien angegeben werden, die beim Auflösen eines bereits bekannten Diensts verwendet werden.The ResolveCriteria class is a version-independent class used to specify the criteria used when resolving an already known service. Sie enthält die Endpunktadresse des bekannten Diensts.It contains the endpoint address of the known service. Der Entwickler kann die Beendigungskriterien für den Auflösungsvorgang bereitstellen, indem er die Duration-Eigenschaft angibt. Diese Eigenschaft legt fest, wie lange der Client auf Antworten wartet.The developer can provide the termination criteria for the resolve operation by specifying the Duration, which specifies how long the client waits for responses.

ResolveResponseResolveResponse

Das ResolveResponse-Objekt wird mit der Antwort des Resolve-Vorgangs an den Aufrufer der Resolve-Methode zurückgegeben.The ResolveResponse is returned to the caller of the Resolve method with the response of the Resolve operation. Sie ist auch in ResolveCompletedEventArgs enthalten.It is also present in ResolveCompletedEventArgs. Darin ist eine Instanz von EndpointDiscoveryMetadata enthalten, wobei es sich um die ermittelten Endpunkte und eine Instanz von DiscoveryMessageSequence handelt.It contains an instance of EndpointDiscoveryMetadata, which is the discovered endpoints and an instance of DiscoveryMessageSequence.

ServiceDiscoveryBehaviorServiceDiscoveryBehavior

Mithilfe der ServiceDiscoveryBehavior-Klasse kann der Entwickler der Suchfunktion einen Dienst hinzufügen.The ServiceDiscoveryBehavior class allows the developer to add the discovery feature to a service. Sie fügen dieses Verhalten dem ServiceHost-Objekt hinzu.You add this behavior to the ServiceHost. Die ServiceDiscoveryBehavior-Klasse durchläuft die Anwendungsendpunkte, die dem Diensthost hinzugefügt wurden, und erstellt aus den erkennbaren Endpunkten eine Auflistung von EndpointDiscoveryMetadata.The ServiceDiscoveryBehavior class iterates over the application endpoints added to the service host and creates a collection of EndpointDiscoveryMetadata from the discoverable endpoints. Alle Endpunkte sind standardmäßig erkennbar.All endpoints are discoverable by default. Sie können die Erkennbarkeit eines bestimmten Endpunkts steuern, indem Sie dem jeweiligen Endpunkt EndpointDiscoveryBehavior hinzufügen.The discoverability of a particular endpoint can be controlled by adding the EndpointDiscoveryBehavior to that particular endpoint. Falls ServiceDiscoveryBehavior Ankündigungsendpunkte hinzugefügt werden, wird die Ankündigung aller erkennbaren Endpunkte jeweils über jeden einzelnen Ankündigungsendpunkt gesendet, wenn der Diensthost geöffnet oder geschlossen wird.If announcement endpoints are added to ServiceDiscoveryBehavior then the announcement of all discoverable endpoints is sent over each of the announcement endpoints when the service host is opened or closed.

ServiceDiscoveryExtensionServiceDiscoveryExtension

Die ServiceDiscoveryExtension Klasse wird erstellt, indem die ServiceDiscoveryBehavior Klasse.The ServiceDiscoveryExtension class is created by the ServiceDiscoveryBehavior class. Die Endpunkte, die erkennbar gemacht werden können von abgerufen werden ServiceDiscoveryExtension.The endpoints that are made discoverable can be obtained from ServiceDiscoveryExtension. Diese Klasse wird auch verwendet, um eine benutzerdefinierte Suchdienstimplementierung anzugeben.This class is also used to specify a custom discovery service implementation.

UdpAnnouncementEndpointUdpAnnouncementEndpoint

Die UdpAnnouncementEndpoint-Klasse ist ein standardmäßiger Ankündigungsendpunkt, der für die Ankündigung über eine UDP-Multicastbindung vorkonfiguriert ist.The UdpAnnouncementEndpoint class is a standard announcement endpoint that is pre-configured for announcement over a UDP multicast binding. Standardmäßig ist UdpAnnouncementEndpoint auf die Verwendung der WS_Discovery-Version "WSApril2005" festgelegt.By default, UdpAnnouncementEndpoint is set to use the WSApril2005 WS_Discovery version.

UdpDiscoveryEndpointUdpDiscoveryEndpoint

Die UdpDiscoveryEndpoint-Klasse ist ein Standardsuchendpunkt, der für die Suche über eine UDP-Multicastbindung vorkonfiguriert ist.The UdpDiscoveryEndpoint class is a standard discovery endpoint that is pre-configured for discovery over a UDP multicast binding. Standardmäßig DiscoveryEndpoint ist so festgelegt, die Version "wsdiscovery11" WS-Suche und Adhoc Modus.By default, DiscoveryEndpoint is set to use the WSDiscovery11 WS-Discovery version and Adhoc mode.