Dela via


Konfigurera identifiering i en konfigurationsfil

Det finns fyra större grupper med konfigurationsinställningar som används i identifieringen. Det här avsnittet beskriver kort var och en och visar exempel på hur du konfigurerar dem. Efter varje avsnitt finns en länk till mer djupgående dokumentation om varje område.

Beteendekonfiguration

Identifiering använder tjänstbeteenden och slutpunktsbeteenden. Beteendet ServiceDiscoveryBehavior möjliggör identifiering för alla en tjänsts slutpunkter och gör att du kan ange slutpunkter för meddelanden. I följande exempel visas hur du lägger ServiceDiscoveryBehavior till och anger en slutpunkt för meddelanden.

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

När du har angett beteendet refererar du till det från ett <service> element enligt följande exempel.

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

För att en tjänst ska kunna identifieras måste du också lägga till en identifieringsslutpunkt. Exemplet ovan lägger till en UdpDiscoveryEndpoint standardslutpunkt.

När du lägger till slutpunkter för meddelanden måste du också lägga till en meddelandelyssnaretjänst i elementet <services> enligt följande exempel.

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

Beteendet EndpointDiscoveryBehavior används för att aktivera eller inaktivera identifiering av en specifik slutpunkt. I följande exempel konfigureras en tjänst med två programslutpunkter, en med identifiering aktiverat och en med identifiering inaktiverad. För varje slutpunkt läggs ett EndpointDiscoveryBehavior beteende till.

<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>
</system.serviceModel>

Beteendet EndpointDiscoveryBehavior kan också användas för att lägga till anpassade metadata till slutpunktsmetadata som returneras av tjänsten. I följande exempel visas hur du gör detta.

<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 nested="true">
            <NestedMetadata>This is a nested custom metadata.</NestedMetadata>
         </CustomMetadata>
      </extensions>
   </endpointDiscovery>
</behavior>

Beteendet EndpointDiscoveryBehavior kan också användas för att lägga till omfång och typer som klienter använder för att söka efter tjänster. I följande exempel visas hur du gör detta i en konfigurationsfil på klientsidan.

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

Mer information om ServiceDiscoveryBehavior och EndpointDiscoveryBehavior se Översikt över WCF-identifiering.

Konfiguration av bindningselement

Konfiguration av bindningselement är mest intressant på klientsidan. Du kan använda konfigurationen för att ange de sökvillkor som används för att identifiera tjänster från ett WCF-klientprogram. I följande exempel skapas en anpassad bindning med DiscoveryClient kanalen och sökvillkor som innehåller en typ och ett omfång. Dessutom anger den värden för Duration egenskaperna och MaxResults .

<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>
   </customBinding>
</bindings>

Den här anpassade bindningskonfigurationen måste refereras av en klientslutpunkt:

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

Mer information om sökkriterier finns i Identifieringssökning och FindCriteria. Mer information om identifierings- och bindningselement finns i Översikt över WCF-identifiering

Standardslutpunktskonfiguration

Standardslutpunkter är fördefinierade slutpunkter som har standardvärden för en eller flera egenskaper (adress, bindning eller kontrakt) eller ett eller flera egenskapsvärden som inte kan ändras. .NET 4 levereras med 3 identifieringsrelaterade standardslutpunkter: UdpDiscoveryEndpoint, UdpAnnouncementEndpointoch DynamicEndpoint. UdpDiscoveryEndpoint är en standardslutpunkt som är förkonfigurerad för identifieringsåtgärder över en UDP multicast-bindning. UdpAnnouncementEndpoint är en standardslutpunkt som är förkonfigurerad för att skicka meddelanden via en UDP-bindning. DynamicEndpoint är en standardslutpunkt som använder identifiering för att hitta slutpunktsadressen för en identifierad tjänst dynamiskt vid körning. Standardbindningar anges med ett <endpoint> element som innehåller typattribut som angav vilken typ av standardslutpunkt som ska läggas till. I följande exempel visas hur du lägger till en UdpDiscoveryEndpoint och en UdpAnnouncementEndpoint.

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

Standardslutpunkter konfigureras i ett <standardEndpoints> element. I följande exempel visas hur du konfigurerar UdpDiscoveryEndpoint och 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>
</standardEndpoints>

När du har lagt till standardslutpunktskonfigurationen refererar du till konfigurationen i elementet <endpoint> för varje slutpunkt enligt följande exempel.

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

Till skillnad från de andra standardslutpunkterna som används i identifieringen anger du en bindning och ett kontrakt för DynamicEndpoint. I följande exempel visas hur du lägger till och konfigurerar en 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>

Mer information om standardslutpunkter finns i Standardslutpunkter.