Beispiel für Suche mit Bereichen

Im DiscoveryWithScopes-Beispiel wird veranschaulicht, wie Bereiche verwendet werden, um erkennbare Endpunkte zu kategorisieren, und wie DiscoveryClient verwendet wird, um eine asynchrone Suche nach Endpunkten durchzuführen. In Bezug auf den Dienst wird in diesem Beispiel veranschaulicht, wie die Suche für jeden Endpunkt angepasst wird, indem ein Endpunktsuchverhalten hinzugefügt und damit dem Endpunkt ein Bereich hinzugefügt sowie die Ermittelbarkeit des Endpunkts gesteuert wird. In Bezug auf den Client wird in diesem Beispiel beschrieben, wie Clients einen DiscoveryClient erstellen und die Suchparameter optimieren können, um Bereiche einzuschließen, indem Bereiche zu FindCriteria hinzugefügt werden. In diesem Beispiel wird auch gezeigt, wie Clients Antworten durch Hinzufügen eines Beendigungskriteriums einschränken können.

Dienstfunktionen

In diesem Projekt wird gezeigt, wie zwei Dienstendpunkte zu einem ServiceHost hinzugefügt werden. Jedem Endpunkt ist ein EndpointDiscoveryBehavior zugeordnet. Dieses Verhalten wird verwendet, um URI-Bereiche für beide Endpunkte hinzuzufügen. Bereiche werden zur Unterscheidung der einzelnen Endpunkte verwendet, damit die Clients die Suche optimieren können. Für den zweiten Endpunkt kann die Ermittelbarkeit deaktiviert werden, indem die Enabled-Eigenschaft auf false festgelegt wird. Dadurch wird sichergestellt, dass die diesem Endpunkt zugeordneten Suchmetadaten nicht als Teil der Suchnachrichten gesendet werden.

Clientfunktionen

Die FindCalculatorServiceAddress()-Methode veranschaulicht die Verwendung von einem DiscoveryClient und die Übergabe von FindCriteria mit zwei Einschränkungen. Den Kriterien wird ein Bereich hinzugefügt, und die MaxResults-Eigenschaft wird auf 1 festgelegt. Der Bereich beschränkt die Ergebnisse auf die Dienste, die den gleichen Bereich veröffentlichen. Durch Festlegen von MaxResults auf 1 werden die Antworten, auf die der DiscoveryClient wartet, auf maximal einen Endpunkt beschränkt. Der Find-Aufruf ist ein synchroner Vorgang, der den Thread blockiert, bis ein Timeout überschritten bzw. ein Endpunkt gefunden wird.

So verwenden Sie dieses Beispiel

  1. In diesem Beispiel werden HTTP-Endpunkte verwendet. Zur Ausführung des Beispiels müssen die richtigen URL-ACLs hinzugefügt werden. Weitere Informationen finden Sie unter Konfigurieren von HTTP und HTTPS. Durch die Ausführung des folgenden Befehls mit erweiterten Berechtigungen werden die entsprechenden ACLs hinzugefügt. Es empfiehlt sich, die folgenden Argumente durch die Domäne und den Benutzernamen zu ersetzen, wenn der Befehl nicht funktioniert: netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Erstellen Sie die Projektmappe.

  3. Führen Sie die ausführbare Dienstdatei aus dem Buildverzeichnis aus.

  4. Führen Sie die ausführbare Clientanwendung aus. Beachten Sie, dass der Client in der Lage ist, den Dienst zu finden.