Sdílet prostřednictvím


Konfigurace zjišťování v konfiguračním souboru

Při zjišťování se používají čtyři hlavní skupiny nastavení konfigurace. Toto téma stručně popíše každou z nich a ukáže příklady, jak je nakonfigurovat. V každé části najdete odkaz na podrobnější dokumentaci o jednotlivých oblastech.

Konfigurace chování

Zjišťování používá chování služeb a chování koncových bodů. Toto ServiceDiscoveryBehavior chování umožňuje zjišťování pro všechny koncové body služby a umožňuje zadat koncové body oznámení. Následující příklad ukazuje, jak přidat ServiceDiscoveryBehavior a zadat koncový bod oznámení.

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

Jakmile zadáte chování, odkazujte na něj z elementu <service> , jak je znázorněno v následující ukázce.

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

Aby služba mohla být zjistitelná, musíte přidat také koncový bod zjišťování, výše uvedený příklad přidá UdpDiscoveryEndpoint standardní koncový bod.

Když přidáte koncové body oznámení, musíte do elementu <services> přidat také službu naslouchacího procesu oznámení, jak je znázorněno v následujícím příkladu.

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

Toto EndpointDiscoveryBehavior chování se používá k povolení nebo zakázání zjišťování konkrétního koncového bodu. Následující příklad nakonfiguruje službu se dvěma koncovými body aplikace, jednu s povoleným zjišťováním a druhou se zakázaným zjišťováním. Pro každý koncový bod EndpointDiscoveryBehavior se přidá chování.

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

Toto EndpointDiscoveryBehavior chování lze také použít k přidání vlastních metadat do metadat koncového bodu vrácených službou. Následující příklad ukazuje, jak to provést.

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

Toto EndpointDiscoveryBehavior chování lze také použít k přidání oborů a typů, které klienti používají k hledání služeb. Následující příklad ukazuje, jak to provést v konfiguračním souboru na straně klienta.

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

Další informace o ServiceDiscoveryBehavior službě WCF Discovery Overview (Přehled zjišťování WCF) a EndpointDiscoveryBehavior naleznete v něm další informace.

Konfigurace elementu vazby

Konfigurace elementu vazby je nejzajímavější na straně klienta. Pomocí konfigurace můžete určit kritéria hledání použitá ke zjišťování služeb z klientské aplikace WCF. Následující příklad vytvoří vlastní vazbu s kanálem DiscoveryClient a určuje kritéria hledání, která zahrnují typ a obor. Kromě toho určuje hodnoty pro vlastnosti Duration a MaxResults vlastnosti.

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

Na tuto vlastní konfiguraci vazby musí odkazovat koncový bod klienta:

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

Další informace o kritériích hledání naleznete v tématu Hledání zjišťování a FindCriteria. Další informace o elementech zjišťování a vazeb najdete v tématu Přehled zjišťování WCF.

Standardní konfigurace koncového bodu

Standardní koncové body jsou předdefinované koncové body, které mají výchozí hodnoty pro jednu nebo více vlastností (adresa, vazba nebo kontrakt) nebo jednu nebo více hodnot vlastností, které se nedají změnit. .NET 4 se dodává se 3 koncovými body standardu souvisejícími se zjišťováním: UdpDiscoveryEndpoint, UdpAnnouncementEndpointa DynamicEndpoint. Jedná se UdpDiscoveryEndpoint o standardní koncový bod, který je předem nakonfigurovaný pro operace zjišťování přes vazbu vícesměrového vysílání UDP. Jedná se UdpAnnouncementEndpoint o standardní koncový bod, který je předem nakonfigurovaný tak, aby odesílal zprávy oznámení přes vazbu UDP. Jedná se DynamicEndpoint o standardní koncový bod, který používá zjišťování k dynamickému vyhledání adresy koncového bodu zjištěné služby za běhu. Standardní vazby jsou určeny elementem <endpoint> , který obsahuje druh atributu, který určil typ standardního koncového bodu, který chcete přidat. Následující příklad ukazuje, jak přidat a UdpDiscoveryEndpoint a UdpAnnouncementEndpoint.

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

Standardní koncové body jsou nakonfigurované v elementu <standardEndpoints> . Následující příklad ukazuje, jak nakonfigurovat a UdpDiscoveryEndpoint 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>

Po přidání standardní konfigurace koncového bodu použijte odkaz na konfiguraci v elementu <endpoint> pro každý koncový bod, jak je znázorněno v následující ukázce.

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

Na rozdíl od ostatních standardních koncových bodů používaných při zjišťování zadáte vazbu a kontrakt pro DynamicEndpoint. Následující příklad ukazuje, jak přidat a nakonfigurovat 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>

Další informace o standardních koncových bodech najdete v tématu Standardní koncové body.