KonfigurationsbeispielConfiguration Sample

In diesem Beispiel wird veranschaulicht, wie ein Dienst mithilfe einer Konfigurationsdatei erkennbar gemacht wird.This sample demonstrates the use of a configuration file to make a service discoverable.

Hinweis

In diesem Beispiel wird die Suche in die Konfiguration implementiert.This sample implements discovery in configuration. Ein Beispiel, die Ermittlung in Code implementiert werden, finden Sie unter grundlegende.For a sample that implements discovery in code, see Basic.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

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

DienstkonfigurationService Configuration

Die Konfigurationsdatei in diesem Beispiel veranschaulicht zwei Funktionen:The configuration file in this sample demonstrates two features:

  • Erkennbar machen des Diensts über einen standardmäßigen UdpDiscoveryEndpoint.Making the service discoverable over a standard UdpDiscoveryEndpoint.

  • Anpassen von die Suche betreffenden Informationen für den Anwendungsendpunkt des Diensts und Anpassen von die Suche betreffenden Einstellungen am Standardendpunkt.Adjusting discovery-related information for the service’s application endpoint and adjusting some of the discovery-related settings on the standard endpoint.

Um die Suche zu aktivieren, müssen einige Änderungen in der Anwendungskonfigurationsdatei für den Dienst vorgenommen werden:To enable discovery, a few changes must be made in the application configuration file for the service:

  • Ein Suchendpunkt muss zum <service>-Element hinzugefügt werden.A discovery endpoint must be added to the <service> element. Dabei handelt es sich um einen standardmäßigen UdpDiscoveryEndpoint-Endpunkt.This is a standard UdpDiscoveryEndpoint endpoint. Diesen Systemendpunkt ordnet die Laufzeit dem Suchdienst zu.This is a system endpoint that the runtime associates with the discovery service. Der Suchdienst lauscht an diesem Endpunkt nach Nachrichten.The discovery service listens for messages on this endpoint.

  • Das <serviceDiscovery>-Verhalten wird zum <serviceBehaviors>-Abschnitt hinzugefügt.A <serviceDiscovery> behavior is added to the <serviceBehaviors> section. 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.This enables the service to be discovered at runtime and uses the discovery endpoint mentioned previously to listen for discovery Probe and Resolve messages. Mit diesen beiden Ergänzungen ist der Dienst am angegebenen Suchendpunkt erkennbar.With these two additions, the service is discoverable at the discovery endpoint specified.

Der folgende Konfigurationsausschnitt zeigt einen Dienst mit einem definierten Anwendungsendpunkt und einem definierten Suchendpunkt:The following config snippet shows a service with an application endpoint and a discovery endpoint defined:

<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 zu nutzen, müssen Sie einen Ankündigungsendpunkt hinzufügen.To take advantage of announcements, you will need to add an announcement endpoint. Ändern Sie hierfür die Konfigurationsdatei wie im folgenden Code gezeigt.To do this, modify the configuration file as shown in the following code.

<serviceDiscovery>  
            <announcementEndpoints>  
              <endpoint kind="udpAnnouncementEndpoint"/>  
            </announcementEndpoints>  
          </serviceDiscovery>  

Wenn Sie dem Suchdienstverhalten einen Ankündigungsendpunkt hinzufügen, wird für den Dienst ein Standardankündigungsclient erstellt.Adding an announcement endpoint to the discovery service behavior creates a default announcement client for the service. Hiermit wird sichergestellt, dass der Dienst eine Online- und eine Offlineankündigung sendet, wenn er geöffnet bzw. geschlossen wird.This guarantees that the service will send an online and offline announcement when the service is opened and closed respectively.

In dieser Konfigurationsdatei werden neben diesen einfachen Schritten noch zusätzliche Verhaltensweisen geändert.This configuration file goes beyond just those simple steps by modifying additional behaviors. Durch die Verwendung von bestimmten Endpunkten können die Suche betreffende Informationen gesteuert werden.It is possible to control discovery-related information by using specific endpoints. 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.That is, a user can control whether an endpoint can be discovered and the user can also mark that endpoint with Scopes and custom XML metadata. Hierzu muss der Benutzer eine behaviorConfiguration-Eigenschaft zum Anwendungsendpunkt hinzufügen.To do this, the user must add a behaviorConfiguration property to the application endpoint. In diesem Fall wird dem Anwendungsendpunkt die folgende Eigenschaft hinzugefügt.In this case, the following property is added to the application endpoint.

behaviorConfiguration="endpointBehaviorConfiguration"  

Mit dem Verhaltenskonfigurationselement können Sie die Suche betreffende Attribute steuern.Now, through the behavior configuration element, you can control discovery-related attributes. In diesem Fall werden dem Anwendungsendpunkt zwei Bereiche hinzugefügt.In this case, two scopes are added to the application endpoint.

<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 Bereichen finden Sie unter Ermittlung und FindCriteria.For more information about scopes, see Discovery Find and FindCriteria.

Sie können auch bestimmte Details des Suchendpunkts steuern.You can also control specific details of the discovery endpoint. Dies erfolgt mithilfe von StandardEndpointsSection.This is done through the StandardEndpointsSection. In diesem Beispiel wird die Version des verwendeten Protokolls geändert und ein maxResponseDelay-Attribut wie im folgenden Codebeispiel hinzugefügt.In this sample, the version of the protocol used is modified as well as adding a maxResponseDelay attribute as shown in the following code example.

<standardEndpoints>  
   <udpDiscoveryEndpoint>  
      <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />    
   </udpDiscoveryEndpoint>  
</standardEndpoints>  

Im Folgenden finden Sie die vollständige Konfigurationsdatei, die in diesem Beispiel verwendet wird:The following is the complete configuration file used in this example:

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

ClientkonfigurationClient Configuration

In der Anwendungskonfigurationsdatei für den Client wird ein standardEndpoint des Typs dynamicEndpoint zur Nutzung der Suche verwendet, wie im folgenden Konfigurationsausschnitt gezeigt.In the application configuration file for the client, a standardEndpoint of type dynamicEndpoint is used to utilize discovery as shown in the following config snippet.

<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.When a client is using a dynamicEndpoint, the runtime performs discovery automatically. Bei der Suche werden verschiedene Einstellungen verwendet, z. B. die im Abschnitt discoveryClientSettings definierten Einstellungen. Dieser Abschnitt gibt den Typ des zu verwendenden Suchendpunkts an:Various settings are used during discovery, such as those defined in the discoveryClientSettings section, which specifies the type of discovery endpoint to use:

<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />  

Die Suchkriterien, die bei der Suche nach Diensten verwendet werden:The find criteria used to search for services:

<!-- 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.This sample extends this feature and modifies the FindCriteria used by the client, as well as some properties of the standard updDiscoveryEndpoint used for discovery. Die FindCriteria werden geändert, um einen Bereich und einen bestimmten scopeMatchBy-Algorithmus sowie benutzerdefinierte Beendigungskriterien zu verwenden.The FindCriteria are modified to use a scope and a specific scopeMatchBy algorithm, as well as custom termination criteria. Weiterhin wird im Beispiel gezeigt, wie ein Client XML-Elemente mit Probe-Nachrichten senden kann.Furthermore, the sample also shows how a client can send XML elements using Probe messages. 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.Lastly, some changes are made to the UdpDiscoveryEndpoint, such as the version of the protocol used and UDP-specific settings as shown in the following configuration file.

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

Im Folgenden finden Sie die vollständige Clientkonfiguration, die im Beispiel verwendet wird.The following is the complete client configuration used in the sample.

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

So verwenden Sie dieses BeispielTo use this sample

  1. Dieses Beispiel verwendet die HTTP-Endpunkte und Ausführung dieser Beispiele, die richtige URL-ACLs hinzugefügt werden ausführliche Informationen finden Sie Configuring HTTP and HTTPS Details.This sample uses HTTP endpoints and to run this sample, proper URL ACLs must be added see Configuring HTTP and HTTPS for details. Durch die Ausführung des folgenden Befehls mit erweiterten Berechtigungen werden die entsprechenden ACLs hinzugefügt.Executing the following command at an elevated privilege should add the appropriate ACLs. Es empfiehlt sich, die Domäne und den Benutzernamen durch die folgenden Argumente zu ersetzen, wenn der Befehl nicht funktioniert.You may want to substitute your Domain and Username for the following arguments if the command does not work as is. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Erstellen Sie die Projektmappe.Build the solution.

  3. Führen Sie die ausführbare Dienstdatei aus dem Buildverzeichnis aus.Run the service executable from the build directory.

  4. Führen Sie die ausführbare Clientanwendung aus.Run the client executable. Beachten Sie, dass der Client in der Lage ist, den Dienst zu finden.Note that the client is able to locate the service.

Siehe auchSee Also