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.
Das Konfigurationsbeispiel veranschaulicht die Verwendung einer Konfigurationsdatei, um einen Dienst auffindbar zu machen.
Dienstkonfiguration
Die Konfigurationsdatei in diesem Beispiel veranschaulicht zwei Features:
Machen Sie den Dienst über einen Standard UdpDiscoveryEndpointauffindbar.
Anpassen von Ermittlungsinformationen für den Anwendungsendpunkt des Diensts und Anpassen einiger ermittlungsbezogener Einstellungen auf dem Standardendpunkt.
Um die Ermittlung zu aktivieren, müssen einige Änderungen in der Anwendungskonfigurationsdatei für den Dienst vorgenommen werden:
Dem
<service>Element muss ein Discovery-Endpunkt hinzugefügt werden. Dies ist ein Standardendpunkt UdpDiscoveryEndpoint . Dies ist ein Systemendpunkt, den die Laufzeit mit dem Entdeckungsdienst verbindet. Der Ermittlungsdienst lauscht auf Nachrichten auf diesem Endpunkt.Ein
<serviceDiscovery>Verhalten wird dem<serviceBehaviors>Abschnitt hinzugefügt. Dadurch kann der Dienst zur Laufzeit entdeckt werden und verwendet den zuvor erwähnten Discovery-Endpunkt, um aufProbe- undResolve-Nachrichten zu lauschen. Mit diesen beiden Ergänzungen ist der Dienst am angegebenen Ermittlungsendpunkt auffindbar.
Der folgende Konfigurationsausschnitt zeigt einen Dienst mit einem Anwendungsendpunkt und einem definierten Ermittlungsendpunkt:
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<endpoint name="udpDiscovery"
kind="udpDiscoveryEndpoint"
endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
Um Ankündigungen nutzen zu können, müssen Sie einen Ankündigungsendpunkt hinzufügen. Ändern Sie dazu die Konfigurationsdatei wie im folgenden Code dargestellt.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
Das Hinzufügen eines Ankündigungsendpunkts zum Ermittlungsdienstverhalten erstellt einen Standardankündigungsclient für den Dienst. Dies garantiert, dass der Dienst eine Online- und Offline-Ankündigung sendet, wenn der Dienst geöffnet bzw. geschlossen wird.
Diese Konfigurationsdatei geht über diese einfachen Schritte hinaus, indem zusätzliche Verhaltensweisen geändert werden. Es ist möglich, Ermittlungsinformationen mithilfe bestimmter Endpunkte zu steuern. Das heißt, ein Benutzer kann steuern, ob ein Endpunkt erkannt werden kann, und der Benutzer kann diesen Endpunkt auch mit Scopes und benutzerdefinierte XML-Metadaten markieren. Dazu muss der Benutzer dem Anwendungsendpunkt eine behaviorConfiguration Eigenschaft hinzufügen. In diesem Fall wird die folgende Eigenschaft dem Anwendungsendpunkt hinzugefügt.
behaviorConfiguration="endpointBehaviorConfiguration"
Jetzt können Sie mithilfe des Verhaltenskonfigurationselements Ermittlungsattribute steuern. In diesem Fall werden dem Anwendungsendpunkt zwei Bereiche hinzugefügt.
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
Weitere Informationen zu Geltungsbereichen finden Sie unter Discovery Find und FindCriteria.
Sie können auch bestimmte Details des Ermittlungsendpunkts steuern. Dies erfolgt mithilfe von StandardEndpointsSection. In diesem Beispiel wird die verwendete Protokollversion geändert und ein maxResponseDelay Attribut hinzugefügt, wie im folgenden Codebeispiel gezeigt.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Es folgt die vollständige Konfigurationsdatei, die in diesem Beispiel verwendet wird:
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<!-- Define the discovery endpoint -->
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<!-- Add an announcement endpoint -->
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<!-- Add scopes used to identify the service -->
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
<standardEndpoints>
<udpDiscoveryEndpoint>
<!-- Configure the UDP discovery endpoint -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Clientkonfiguration
In der Anwendungskonfigurationsdatei für den Client wird ein standardEndpoint vom Typ dynamicEndpoint verwendet, um Discovery zu nutzen, wie im folgenden Konfigurationsausschnitt dargestellt.
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
Wenn ein Client einen dynamicEndpoint verwendet, führt die Laufzeit die Suche automatisch durch. Während der Ermittlung werden verschiedene Einstellungen verwendet, z. B. die im discoveryClientSettings Abschnitt definierten Einstellungen, die den Typ des zu verwendenden Ermittlungsendpunkts angeben:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Die Suchkriterien für die Suche nach Diensten:
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
In diesem Beispiel wird diese Funktion erweitert. Außerdem werden die vom Client verwendeten FindCriteria sowie einige für die Suche verwendete Standard-updDiscoveryEndpoint-Eigenschaften geändert. Die FindCriteria werden geändert, um einen Bereich und einen bestimmten scopeMatchBy-Algorithmus sowie benutzerdefinierte Beendigungskriterien zu verwenden. Darüber hinaus zeigt das Beispiel, wie ein Client XML-Elemente mithilfe von Probe Nachrichten senden kann. Schließlich werden einige Änderungen an dem UdpDiscoveryEndpointProtokoll vorgenommen, z. B. die Version des verwendeten Protokolls und UDP-spezifische Einstellungen, wie in der folgenden Konfigurationsdatei dargestellt.
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
Es folgt die vollständige Clientkonfiguration, die im Beispiel verwendet wird.
<configuration>
<system.serviceModel>
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name="dynamicEndpointConfiguration">
<discoveryClientSettings>
<!-- Controls where the discovery happens. In this case, Probe message is sent over UdpDiscoveryEndpoint. -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
So verwenden Sie dieses Beispiel
In diesem Beispiel werden HTTP-Endpunkte verwendet und zum Ausführen dieses Beispiels müssen die richtigen URL-ACLs hinzugefügt werden. Weitere Informationen finden Sie unter Konfigurieren von HTTP und HTTPS. Wenn Sie den folgenden Befehl mit erhöhten Rechten ausführen, sollten Sie die entsprechenden ACLs hinzufügen. Möglicherweise möchten Sie Ihre Domäne und Ihren Benutzernamen durch die folgenden Argumente ersetzen, wenn der Befehl nicht wie folgt funktioniert.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Erstellen Sie die Lösung.
Führen Sie die ausführbare Dienstdatei aus dem Buildverzeichnis aus.
Führen Sie das Client-Programm aus. Beachten Sie, dass der Client den Dienst finden kann.