Suche und FindCriteria

Ein Suchvorgang wird von einem Client initiiert, um einen oder mehrere Dienste zu ermitteln, und ist eine der Hauptaktionen bei der Suche.Beim Durchführen einer Suche wird eine WS-Discovery-Probe-Nachricht über das Netzwerk gesendet.Dienste, die die angegebenen Kriterien erfüllen, antworten mit WS-Discovery-ProbeMatch-Nachrichten.Weitere Informationen finden Sie unter zu Suchnachrichten finden Sie in der WS-Discovery-Spezifikation.

DiscoveryClient

Die DiscoveryClient-Klasse stellt den Mechanismus zur Durchführung von Suchvorgängen bereit und ermöglicht eine einfache Durchführung von Suchclientvorgängen.Sie enthält eine Find-Methode, die eine synchrone (blockierende) Suche ausführt, und eine FindAsync-Methode, die eine asynchrone (nicht blockierende) Suche initiiert.Beide Methoden verwenden einen FindCriteria-Parameter und stellen dem Benutzer Ergebnisse über ein FindResponse-Objekt bereit.

FindCriteria

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.Ein FindCriteria-Objekt kann mehrere Suchkriterien enthalten.Standardmäßig muss der Dienst mit allen Komponenten übereinstimmen, da es sich sonst nicht um einen übereinstimmenden Dienst handelt.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.

Zu den Suchkriterien gehört Folgendes:

  • <xref:System.ServiceModel.Discovery.ContractTypeNames%2A> – Optional.Der Vertragsname des Diensts, nach dem gesucht wird, und die Kriterien, die normalerweise beim Suchen nach einem Dienst verwendet werden.Wenn mehr als ein Vertragsname angegeben wird, antworten nur Dienstendpunkte, die mit ALLEN Verträgen übereinstimmen.Beachten Sie, dass ein Endpunkt unter WCF nur einen Vertrag unterstützen kann.

  • <xref:System.ServiceModel.Discovery.Scopes%2A> – Optional.Bereiche sind absolute URIs, die verwendet werden, um einzelne Dienstendpunkte zu kategorisieren.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.Wenn mehr als ein Bereich angegeben wird, antworten nur Dienstendpunkte, die mit ALLEN Bereichen übereinstimmen.

  • <xref:System.ServiceModel.Discovery.ScopeMatchBy%2A> – Gibt an, welcher Übereinstimmungsalgorithmus verwendet werden soll, während die Übereinstimmung der Bereiche der Probe-Nachricht mit denen des Endpunkts ermittelt wird.Es gibt fünf unterstützte Bereichsübereinstimmungsregeln:

    • <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByExact%2A> führt einen grundlegenden Zeichenfolgenvergleich aus, bei dem die Groß-\/Kleinschreibung beachtet wird.

    • <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByPrefix%2A> ermittelt Übereinstimmungen nach Segmenten, die mit "\/" voneinander getrennt sind.Eine Suche nach "http:\/\/contoso\/building1" führt zu einer Übereinstimmung mit dem Bereich "http:\/\/contoso\/building\/floor1".Beachten Sie, dass sich für "http:\/\/contoso\/building100" keine Übereinstimmung ergibt, weil die letzten beiden Segmente nicht übereinstimmen.

    • <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByLdap%2A> ermittelt für Bereiche Übereinstimmungen nach Segmenten unter Verwendung einer LDAP-URL.

    • <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByUuid%2A> ermittelt mithilfe einer UUID-Zeichenfolge genaue Übereinstimmungen für Bereiche.

    • <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByNone%2A> ermittelt nur Übereinstimmungen für Dienste, die keinen Bereich angeben.

    Wenn keine Bereichsübereinstimmungsregel angegeben wird, wird <xref:System.ServiceModel.Discovery.FindCriteria.ScopeMatchByPrefix%2A> verwendet.

Zu den Beendigungskriterien gehört Folgendes:

  1. Duration – Der maximale Zeitraum, wie lange auf Antworten der Dienste im Netzwerk gewartet wird.Der Standardzeitraum beträgt 20 Sekunden.

  2. MaxResults – Die maximale Anzahl von Antworten, auf die gewartet wird.Wenn MaxResults-Antworten empfangen werden, bevor die Duration verstrichen ist, endet der Suchvorgang.

FindResponse

FindResponse verfügt über eine Endpoints-Auflistungseigenschaft, die alle Antworten enthält, die von übereinstimmenden Diensten im Netzwerk gesendet werden.Falls keine Dienste antworten, ist die Auflistung leer.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.

Im folgenden Beispiel wird gezeigt, wie Sie einen Suchvorgang per Code ausführen.

// 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 auch

Übersicht über die WCF-Suche
Verwenden des Suchclientchannels
Suche mit Bereichen
Asynchrone Suche
Standard