Freigeben über


Konfigurationsbeispiel

In diesem Beispiel wird veranschaulicht, wie ein Dienst mithilfe einer Konfigurationsdatei erkennbar gemacht wird.

Dd483343.note(de-de,VS.100).gifHinweis:
In diesem Beispiel wird die Suche in die Konfiguration implementiert. Ein Beispiel, in dem die Suche in Code implementiert wird, finden Sie unter Einfaches Beispiel.

Dd483343.Important(de-de,VS.100).gif Hinweis:
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.

<Installationslaufwerk>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

<Installationslaufwerk>:\WF_WCF_Samples\WCF\Basic\Discovery\Configuration

Dienstkonfiguration

Die Konfigurationsdatei in diesem Beispiel veranschaulicht zwei Funktionen:

  • Erkennbar machen des Diensts über einen standardmäßigen UdpDiscoveryEndpoint.

  • Anpassen von die Suche betreffenden Informationen für den Anwendungsendpunkt des Diensts und Anpassen von die Suche betreffenden Einstellungen am Standardendpunkt.

Um die Suche zu aktivieren, müssen zwei Änderungen in der Anwendungskonfigurationsdatei für den Dienst vorgenommen werden:

  • Ein Suchendpunkt muss zum <service>-Element hinzugefügt werden. Dabei handelt es sich um einen standardmäßigen UdpDiscoveryEndpoint-Endpunkt. Diesen Systemendpunkt ordnet die Laufzeit dem Suchdienst zu. Der Suchdienst lauscht an diesem Endpunkt nach Nachrichten.

  • Das <serviceDiscovery>-Verhalten wird zum <serviceBehaviors>-Abschnitt hinzugefügt. Auf diese Weise kann der Dienst zur Laufzeit erkannt werden. Der zuvor erwähnte Suchendpunkt wird zum Lauschen nach Such-Probe-Nachrichten und Such-Resolve-Nachrichten verwendet. Mit diesen beiden Ergänzungen ist der Dienst am angegebenen Suchendpunkt erkennbar.

In dieser Konfigurationsdatei werden neben diesen einfachen Schritten noch zusätzliche Verhaltensweisen geändert. Durch die Verwendung von bestimmten Endpunkten können die Suche betreffende Informationen gesteuert werden. Das bedeutet, dass ein Benutzer steuern kann, ob ein Endpunkt erkennbar ist. Der Benutzer kann diesen Endpunkt außerdem mit Scopes und benutzerdefinierten XML-Metadaten markieren. Hierzu muss der Benutzer eine behaviorConfiguration-Eigenschaft zum Anwendungsendpunkt hinzufügen. In diesem Fall wird dem Anwendungsendpunkt die folgende Eigenschaft hinzugefügt.

behaviorConfiguration="endpointBehaviorConfiguration"

Mit dem Verhaltenskonfigurationselement können Sie die Suche betreffende Attribute steuern. In diesem Fall werden dem Anwendungsendpunkt zwei Bereiche hinzugefügt.

Sie können auch bestimmte Details des Suchendpunkts steuern. Dies erfolgt mithilfe von StandardEndpointsSection. In diesem Beispiel wird die Version des verwendeten Protokolls geändert und ein maxResponseDelay-Attribut wie im folgenden Codebeispiel hinzugefügt.

<configuration>
    <system.serviceModel>

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

      <behaviors>

        <serviceBehaviors>
          <behavior name="calculatorServiceBehavior">
            <serviceDiscovery/>
          </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
          <behavior name="endpointBehaviorConfiguration">

            <endpointDiscovery>
              <scopes>
                <add scope="http://www.example.org/calculator"/>
                <add scope="ldap:///ou=engineering,o=exampleorg,c=us"/>
              </scopes>
            </endpointDiscovery>

          </behavior>          
        </endpointBehaviors>

      </behaviors>

      <standardEndpoints>
        <udpDiscoveryEndpoint>
          <!-- Specify the discovery protocol version and maxResponseDelay -->
          <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 des Typs dynamicEndpoint zur Nutzung der Suche verwendet. Wenn ein Client einen dynamicEndpoint verwendet, führt die Laufzeit die Suche automatisch durch. Während der Suche werden verschiedene Standardeinstellungen verwendet, z. B. discoveryClient. Diese Einstellung sucht nach einem Dienst, der mit dem Vertrag übereinstimmt, der von einem Client mit einem udpDiscovery-Endpunkt angegeben wird. 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. Weiterhin wird im Beispiel gezeigt, wie ein Client XML-Elemente mit Probe-Nachrichten senden kann. Schließlich werden einige Änderungen am UdpDiscoveryEndpoint vorgenommen, z. B. die Version des verwendeten Protokolls und UDP-spezifische Einstellungen, wie in der folgenden Konfigurationsdatei gezeigt.

<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="https://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
              <scopes>
                <add scope="https://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>

So verwenden Sie dieses Beispiel

  1. In diesem Beispiel werden HTTP-Endpunkte verwendet. Zur Ausführung des Beispiels müssen geeignete URL-ACLs hinzugefügt werden. Informationen dazu 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.