Konfigurieren der Suche in einer KonfigurationsdateiConfiguring Discovery in a Configuration File

Es gibt vier Hauptgruppen von Konfigurationseinstellungen, die bei der Suche verwendet wurden.There are four major groups of configuration settings used in discovery. In diesem Thema werden die Gruppen beschrieben und jeweils Beispiele für deren Konfiguration angegeben.This topic will briefly describe each and show examples of how to configure them. Nach jedem Abschnitt folgt ein Link zu einer ausführlicheren Dokumentation der einzelnen Bereiche.Following each section will be a link to more in-depth documentation about each area.

VerhaltenskonfigurationBehavior Configuration

Bei der Suche werden Dienstverhalten und Endpunktverhalten verwendet.Discovery uses service behaviors and endpoint behaviors. Das ServiceDiscoveryBehavior-Verhalten aktiviert die Suche für alle Endpunkte eines Diensts und ermöglicht Ihnen das Angeben von Ankündigungsendpunkten.The ServiceDiscoveryBehavior behavior enables discovery for all of a service’s endpoints and allows you to specify announcement endpoints. Das folgende Beispiel zeigt, wie Sie das ServiceDiscoveryBehavior hinzufügen und einen Ankündigungsendpunkt angeben.The following example shows how to add the ServiceDiscoveryBehavior and specify an announcement endpoint.

<behaviors>  
      <serviceBehaviors>  
        <behavior name="helloWorldServiceBehavior">  
          <serviceDiscovery>  
            <announcementEndpoints>  
              <endpoint kind="udpAnnouncementEndpoint"/>  
            </announcementEndpoints>  
          </serviceDiscovery>  
        </behavior>  
      </serviceBehaviors>  

Nachdem Sie das Verhalten angegeben haben, verweisen Sie aus einem <service>-Element darauf, wie im folgenden Beispiel gezeigt.Once you specify the behavior, reference it from a <service> element as shown in the following sample.

<system.serviceModel>  
   <services>  
      <service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">  
         <!-- Application Endpoint -->  
         <endpoint address="endpoint0"  
                   binding="basicHttpBinding"  
                   contract="IHelloWorldService" />  
         <!-- Discovery Endpoints -->  
         <endpoint kind="udpDiscoveryEndpoint" />  
        </service>  
    </service>  

Damit ein Dienst erkennbar ist, müssen Sie auch einen Suchendpunkt hinzufügen. Im Beispiel oben wird ein UdpDiscoveryEndpoint-Standardendpunkt hinzugefügt.In order for a service to be discoverable, you must also add a discovery endpoint, the example above adds a UdpDiscoveryEndpoint standard endpoint.

Wenn Sie Ankündigungsendpunkte hinzufügen, müssen Sie dem <services>-Element auch einen Ankündigungslistenerdienst hinzufügen. Dies wird im folgenden Beispiel veranschaulicht.When you add announcement endpoints you must also add an announcement listener service to the <services> element as shown in the following example.

<services>  
   <service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">  
      <!-- Application Endpoint -->  
      <endpoint address="endpoint0"  
                binding="basicHttpBinding"  
                contract="IHelloWorldService" />  
      <!-- Discovery Endpoints -->  
      <endpoint kind="udpDiscoveryEndpoint" />  
   </service>  
   <!-- Announcement Listener Configuration -->  
   <service name="AnnouncementListener">  
      <endpoint kind="udpAnnouncementEndpoint" />  
   </service>  

Das EndpointDiscoveryBehavior-Verhalten wird verwendet, um die Suche nach einem bestimmten Endpunkt zu aktivieren oder zu deaktivieren.The EndpointDiscoveryBehavior behavior is used to enable or disable discovery of a specific endpoint. Im folgenden Beispiel wird ein Dienst mit zwei Anwendungsendpunkten konfiguriert, wobei die Suche für einen Endpunkt aktiviert und für den anderen deaktiviert ist.The following example configures a service with two application endpoints, one with discovery enabled and one with discovery disabled. Für jeden Endpunkt wird ein EndpointDiscoveryBehavior-Verhalten hinzugefügt.For each endpoint an EndpointDiscoveryBehavior behavior is added.

<system.serviceModel>  
   <services>  
      <service name="HelloWorldService"  
               behaviorConfiguration="helloWorldServiceBehavior">  

        <!-- Application Endpoints -->  
        <endpoint address="endpoint0"  
                 binding="basicHttpBinding"  
                 contract="IHelloWorldService"   
                 behaviorConfiguration="ep0Behavior" />  

        <endpoint address="endpoint1"  
                  binding="basicHttpBinding"  
                  contract="IHelloWorldService"  
                  behaviorConfiguration="ep1Behavior" />  

        <!-- Discovery Endpoints -->  
        <endpoint kind="udpDiscoveryEndpoint" />  
      </service>  
   </services>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="helloWorldServiceBehavior">  
          <serviceDiscovery />  
        </behavior>  
      </serviceBehaviors>  
      <endpointBehaviors>  
        <behavior name="ep0Behavior">  
          <endpointDiscovery enabled="true"/>  
        </behavior>  
        <behavior name="ep1Behavior">  
          <endpointDiscovery enabled="false"/>  
        </behavior>  
     </endpointBehaviors>  
   </behaviors>  

Sie können das EndpointDiscoveryBehavior-Verhalten auch verwenden, um den vom Dienst zurückgegebenen Endpunktmetadaten benutzerdefinierte Metadaten hinzuzufügen.The EndpointDiscoveryBehavior behavior can also be used to add custom metadata to the endpoint metadata returned by the service. Das folgende Beispiel zeigt die dazu erforderliche Vorgehensweise.The following example shows how to do this.

<behavior name="ep4Behavior">  
   <endpointDiscovery enabled="true">  
      <extensions>  
         <CustomMetadata>This is custom metadata.</CustomMetadata>  
         <d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:i="http://printer.example.org/2003/imaging">i:PrintBasic</d:Types>  
         <CustomMetadata netsted="true">  
            <NestedMetadata>This is a nested custom metadata.</NestedMetadata>  
         </CustomMetadata>  
      </extensions>  
   </endpointDiscovery>  
</behavior>  

Sie können das EndpointDiscoveryBehavior-Verhalten auch verwenden, um Bereiche und Typen hinzuzufügen, mit denen Clients nach Diensten suchen.The EndpointDiscoveryBehavior behavior can also be used to add scopes and types that clients use to search for services. Im folgenden Beispiel wird gezeigt, wie Sie dies in einer clientseitigen Konfigurationsdatei durchführen können.The following example shows how to do this in a client side configuration file.

<behavior name="ep2Behavior">  
   <endpointDiscovery enabled="true">  
      <scopes>  
         <add scope="http://www.microsoft.com/building42/floor1"/>  
         <add scope="ldap:///ou=engineeringo=examplecomc=us"/>  
      </scopes>  
      <types>  
         <add name="test" namespace="http://example.microsoft.com/" />  
         <add name="additionalContract" namespace="http://example.microsoft.com/" />  
      </types>  
   </endpointDiscovery>  
</behavior>  

Weitere Informationen zu ServiceDiscoveryBehavior und EndpointDiscoveryBehavior finden Sie unter Überblick über WCF-Ermittlung.For more information about ServiceDiscoveryBehavior and EndpointDiscoveryBehavior see WCF Discovery Overview.

BindungselementkonfigurationBinding Element Configuration

Die Bindungselementkonfiguration eignet sich am besten auf der Clientseite.Binding element configuration is most interesting on the client side. Sie können die Konfiguration verwenden, um die Suchkriterien anzugeben, mit deren Hilfe die Dienste einer WCF-Clientanwendung ermittelt werden.You can use configuration to specify the find criteria used to discover services from a WCF client application. Im folgenden Beispiel wird eine benutzerdefinierte Bindung mit dem DiscoveryClient-Kanal erstellt, und es werden die Suchkriterien angegeben, die einen Typ und einen Bereich enthalten.The following example creates a custom binding with the DiscoveryClient channel and specifies find criteria that includes a type and scope. Außerdem werden Werte für die Eigenschaften Duration und MaxResults angegeben.In addition it specifies values for the Duration and MaxResults properties.

<bindings>  
   <customBinding>  
      <!-- Binding Configuration for the Application Endpoint -->  
      <binding name="discoBindingConfiguration">  
         <discoveryClient>  
            <endpoint kind="discoveryEndpoint"  
                      address="http://localhost:8000/ConfigTest/Discovery"  
                      binding="customBinding"  
                      bindingConfiguration="httpSoap12WSAddressing10"/>  
            <findCriteria duration="00:00:10" maxResults="2">  
              <types>  
                <add name="IHelloWorldService"/>  
              </types>  
              <scopes>  
                <add scope="http://www.microsoft.com/building42/floor1"/>  
              </scopes>              
            </findCriteria>  
          </discoveryClient>  
          <textMessageEncoding messageVersion="Soap11"/>  
          <httpTransport />  
        </binding>  

Auf diese benutzerdefinierte Bindungskonfiguration muss von einem Clientendpunkt aus verwiesen werden:This custom binding configuration must be referenced by a client endpoint:

<client>  
      <endpoint address="http://schemas.microsoft.com/discovery/dynamic"  
                binding="customBinding"  
                bindingConfiguration="discoBindingConfiguration"  
                contract="IHelloWorldService" />  
    </client>  

Weitere Informationen zu den Suchkriterien finden Sie unter Ermittlung und FindCriteria.For more information about find criteria see Discovery Find and FindCriteria. Weitere Informationen zur Ermittlung und Bindung Elemente finden Sie unter WCF Ermittlungsmethoden (Übersicht)For more information about discovery and binding elements see, WCF Discovery Overview

Konfiguration eines StandardendpunktsStandard Endpoint Configuration

Standardendpunkte sind vordefinierte Endpunkte, die Standardwerte für eine oder mehrere Eigenschaften (Adresse, Bindung oder Vertrag) bzw. einen oder mehrere Eigenschaftenwerte aufweisen, die nicht geändert werden können.Standard endpoints are predefined endpoints that have default values for one or more properties (address, binding, or contract) or one or more property values that cannot change. Im Lieferumfang von .NET 4 sind drei Standardendpunkte für die Suche enthalten: UdpDiscoveryEndpoint, UdpAnnouncementEndpoint und DynamicEndpoint..NET 4 ships with 3 discovery related standard endpoints: UdpDiscoveryEndpoint, UdpAnnouncementEndpoint, and DynamicEndpoint. Die UdpDiscoveryEndpoint-Klasse ist ein Standardendpunkt, der für Suchvorgänge über eine UDP-Multicastbindung vorkonfiguriert ist.The UdpDiscoveryEndpoint is a standard endpoint that is pre-configured for discovery operations over a UDP multicast binding. UdpAnnouncementEndpoint ist ein Standardendpunkt, der für das Senden von Ankündigungsnachrichten über eine UDP-Bindung vorkonfiguriert ist.The UdpAnnouncementEndpoint is a standard endpoint that is pre-configured to send announcement messages over a UDP binding. DynamicEndpoint ist ein Standardendpunkt, der die Suche verwendet, um zur Laufzeit dynamisch nach der Endpunktadresse eines ermittelten Diensts zu suchen.The DynamicEndpoint is a standard endpoint that uses discovery to find the endpoint address of a discovered service dynamically at runtime. Standardbindungen werden mit einem <endpoint>-Element angegeben, in dem ein "kind"-Attribut enthalten ist, das den Typ des hinzuzufügenden Standardendpunkts angegeben hat.Standard bindings are specified with an <endpoint> element that contains kind attribute that specified the type of standard endpoint to add. Im folgenden Beispiel wird gezeigt, wie ein UdpDiscoveryEndpoint und ein UdpAnnouncementEndpoint addiert werden.The following example shows how to add a UdpDiscoveryEndpoint and a UdpAnnouncementEndpoint.

<services>  
   <service name="HelloWorldService">  
      <!-- ...  -->          
      <endpoint kind="udpDiscoveryEndpoint" />  
   </service>  
   <service name="AnnouncementListener">  
      <endpoint kind="udpAnnouncementEndpoint" />  
   </service>  
</services>  

Standardendpunkte werden in einem <standardEndpoints>-Element konfiguriert.Standard endpoints are configured in a <standardEndpoints> element. Das folgende Beispiel zeigt, wie Sie UdpDiscoveryEndpoint und UdpAnnouncementEndpoint konfigurieren.The following example shows how to configure the UdpDiscoveryEndpoint and the UdpAnnouncementEndpoint.

<standardEndpoints>  
      <udpAnnouncementEndpoint>  
        <standardEndpoint   
            name="udpAnnouncementEndpointSettings"   
            multicastAddress="soap.udp://239.255.255.250:3703"    
            maxAnnouncementDelay="00:00:00.800">  
          <transportSettings  
            duplicateMessageHistoryLength="1028"  
            maxPendingMessageCount="10"  
            maxMulticastRetransmitCount="3"  
            maxUnicastRetransmitCount="2"  
            socketReceiveBufferSize="131072"  
            timeToLive="2" />  
        </standardEndpoint>  
      </udpAnnouncementEndpoint>  
      <udpDiscoveryEndpoint>  
        <standardEndpoint  
            name="udpDiscoveryEndpointSettings"  
            multicastAddress="soap.udp://239.255.255.252:3704"  
            maxResponseDelay="00:00:00.800">  
          <transportSettings  
            duplicateMessageHistoryLength="2048"  
            maxPendingMessageCount="5"  
            maxReceivedMessageSize="8192"  
            maxBufferPoolSize="262144"/>  
        </standardEndpoint>  
      </udpDiscoveryEndpoint>  

Nachdem Sie die Standardendpunktkonfiguration hinzugefügt haben, verweisen Sie im <endpoint>-Element für jeden Endpunkt auf die Konfiguration, wie im folgenden Beispiel gezeigt.Once you’ve added the standard endpoint configuration, reference the configuration in the <endpoint> element for each endpoint as shown in the following sample.

<services>  
   <service name="HelloWorldService">  
      <!-- ...  -->          
      <endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="udpDiscoveryEndpointSettings"/>  
   </service>  
   <service name="AnnouncementListener">  
      <endpoint kind="udpAnnouncementEndpoint" endpointConfiguration="udpAnnouncementEndpointSettings" >  
   </service>  
</services>  

Im Gegensatz zu den anderen Standardendpunkten, die in der Suche verwendet werden, geben Sie für DynamicEndpoint eine Bindung und einen Vertrag an.Unlike the other standard endpoints used in discovery, you specify a binding and contract for DynamicEndpoint. Das folgende Beispiel zeigt, wie Sie DynamicEndpoint hinzufügen und konfigurieren.The following example shows how to add and configure a DynamicEndpoint.

<system.serviceModel>  
    <client>  
      <endpoint kind="dynamicEndpoint" binding="basicHttpBinding" contract="IHelloWorldService" endpointConfiguration="dynamicEndpointConfiguration" />  
    </client>   
   <standardEndpoints>  
      <dynamicEndpoint>  
         <standardEndpoint name="dynamicEndpointConfiguration">  
             <discoveryClientSettings>  
              <findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="2">  
                 <types>  
                   <add name="IHelloWorldService"/>  
                 </types>  
                 <scopes>  
                   <add scope="http://www.microsoft.com/building42/floor1"/>  
                 </scopes>  
                 <extensions>  
                   <CustomMetadata>This is custom metadata.</CustomMetadata>          
                 </extensions>  
               </findCriteria>  
             </discoveryClientSettings>  
           </standardEndpoint>  
         </dynamicEndpoint>  
   </standardEndpoints>  
</system.ServiceModel>  

Weitere Informationen zu Standardendpunkten finden Sie unter StandardendpunkteFor more information about standard endpoints see Standard Endpoints