Suche und FindCriteriaDiscovery Find and FindCriteria

Ein Suchvorgang wird von einem Client initiiert, um einen oder mehrere Dienste zu ermitteln, und ist eine der Hauptaktionen bei der Suche.A discovery find operation is initiated by a client to discover one or more services and is one of the main actions in discovery. Beim Durchführen einer Suche wird eine WS-Discovery-Probe-Nachricht über das Netzwerk gesendet.Performing a find sends a WS-Discovery Probe message over the network. Dienste, die die angegebenen Kriterien erfüllen, antworten mit WS-Discovery-ProbeMatch-Nachrichten.Services that match the criteria specified reply with WS-Discovery ProbeMatch messages. Weitere Informationen zu Discovery-Nachrichten finden Sie unter der WS-Discovery-Spezifikation.For more information about discovery messages, see the WS-Discovery specification.

DiscoveryClientDiscoveryClient

Die DiscoveryClient-Klasse stellt den Mechanismus zur Durchführung von Suchvorgängen bereit und ermöglicht eine einfache Durchführung von Suchclientvorgängen.The DiscoveryClient class provides the mechanism to perform find operations and makes performing discovery client operations easy. Sie enthält eine Find-Methode, die eine synchrone (blockierende) Suche ausführt, und eine FindAsync-Methode, die eine asynchrone (nicht blockierende) Suche initiiert.It contains a Find method, which performs a (blocking) synchronous find, and a FindAsync method, which initiates a non-blocking asynchronous find. Beide Methoden verwenden einen FindCriteria-Parameter und stellen dem Benutzer Ergebnisse über ein FindResponse-Objekt bereit.Both methods take a FindCriteria parameter, and provide results to the user through a FindResponse object.

FindCriteriaFindCriteria

FindCriteria verfügt über mehrere Eigenschaften, die nach Suchkriterien (nach welchen Diensten soll gesucht werden) und Beendigungskriterien für die Suche (wie lange soll die Suche dauern) gruppiert werden können.FindCriteria has several properties, which can be grouped into search criteria, which specify what services you are looking for, and find termination criteria (how long the search should last). Ein FindCriteria-Objekt kann mehrere Suchkriterien enthalten.A FindCriteria can contain multiple search criteria. Standardmäßig muss der Dienst mit allen Komponenten übereinstimmen, da es sich sonst nicht um einen übereinstimmenden Dienst handelt.By default, the service has to match all of the components otherwise it does not consider itself a matching service. Falls Sie nach Diensten suchen möchten, die nur einige Kriterien erfüllen, können Sie für den Dienst eine benutzerdefinierte Suchlogik implementieren, oder Sie können mehrere Abfragen verwenden.If you want to find services that only match some of the criteria, you can implement custom find logic on the service or you can use multiple queries.

Zu den Suchkriterien gehört Folgendes:Search criteria include:

  • ContractTypeNameElement – Optional.ContractTypeNameElement - Optional. Der Vertragsname des Diensts, nach dem gesucht wird, und die Kriterien, die normalerweise beim Suchen nach einem Dienst verwendet werden.The contract name of the service being searched for and the criteria typically used when searching for a service. Wenn mehr als ein Vertragsname angegeben wird, antworten nur Dienstendpunkte, die mit ALLEN Verträgen übereinstimmen.If more than one contract name is specified, only service endpoints matching ALL contracts reply. Beachten Sie, dass in WCF ein Endpunkt nur einen Vertrag unterstützen kann.Note that in WCF an endpoint can only support one contract.

  • ScopeElement – Optional.ScopeElement - Optional. Bereiche sind absolute URIs, die verwendet werden, um einzelne Dienstendpunkte zu kategorisieren.Scopes are absolute URIs that are used to categorize individual service endpoints. Dies ist in Szenarien nützlich, in denen mehrere Endpunkte den gleichen Vertrag verfügbar machen und in denen Sie nach einer Möglichkeit suchen, nach einer Teilmenge der Endpunkte zu suchen.You may want to use this in scenarios where multiple endpoints expose the same contract and you want a way to search for a subset of the endpoints. Wenn mehr als ein Bereich angegeben wird, antworten nur Dienstendpunkte, die mit ALLEN Bereichen übereinstimmen.If more than one scope is specified, only service endpoints matching ALL scopes reply.

  • ScopeMatchBy – Gibt an, welcher Übereinstimmungsalgorithmus verwendet werden soll, während die Übereinstimmung der Bereiche der Probe-Nachricht mit denen des Endpunkts ermittelt wird.ScopeMatchBy - Specifies the matching algorithm to use while matching the scopes in the Probe message with that of the endpoint. Es gibt fünf unterstützte Bereichsübereinstimmungsregeln:There are five supported scope-matching rules:

    Wenn keine Bereichsübereinstimmungsregel angegeben wird, wird ScopeMatchByPrefix verwendet.If a scope-matching rule is not specified, ScopeMatchByPrefix is used.

Zu den Beendigungskriterien gehört Folgendes:Termination criteria include:

  1. Duration – Der maximale Zeitraum, wie lange auf Antworten der Dienste im Netzwerk gewartet wird.Duration - The maximum time to wait for replies from services on the network. Der Standardzeitraum beträgt 20 Sekunden.The default duration is 20 seconds.

  2. MaxResults – Die maximale Anzahl von Antworten, auf die gewartet wird.MaxResults - The maximum number of replies to wait for. Wenn MaxResults-Antworten empfangen werden, bevor die Duration verstrichen ist, endet der Suchvorgang.If MaxResults replies are received before Duration has elapsed, the find operation ends.

FindResponseFindResponse

FindResponse verfügt über eine Endpoints-Auflistungseigenschaft, die alle Antworten enthält, die von übereinstimmenden Diensten im Netzwerk gesendet werden.FindResponse has an Endpoints collection property that contains any replies sent by matching services on the network. Falls keine Dienste antworten, ist die Auflistung leer.If no services replied, the collection is empty. Falls ein oder mehrere Dienste antworteten, wird jede Antwort in einem EndpointDiscoveryMetadata-Objekt gespeichert. Dieses Objekt enthält die Adresse, den Vertrag und einige weitere Informationen zum Dienst.If one or more services replied, each reply is stored in an EndpointDiscoveryMetadata object, which contains the address, contract, and some additional information about the service.

Im folgenden Beispiel wird gezeigt, wie Sie einen Suchvorgang per Code ausführen.The following example shows how to perform a find operation in code.

// Create DiscoveryClient  
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());  

// Create FindCriteria  
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));  
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));  
findCriteria.Duration = TimeSpan.FromSeconds(10);   

// Find ICalculatorService endpoints              
FindResponse findResponse = discoveryClient.Find(findCriteria);  

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)  

Siehe auchSee Also

Übersicht über die WCF-SucheWCF Discovery Overview
Verwenden des ErmittlungsclientkanalsUsing the Discovery Client Channel
Suche mit BereichenDiscovery with Scopes
Asynchrone SucheAsynchronous Find
StandardBasic