Partilhar via


Configurando a descoberta em um arquivo de configuração

Há quatro grupos principais de definições de configuração usadas na descoberta. Este tópico descreverá brevemente cada um deles e mostrará exemplos de como configurá-los. A seguir a cada secção haverá uma ligação para documentação mais aprofundada sobre cada área.

Configuração de comportamento

A descoberta usa comportamentos de serviço e comportamentos de ponto de extremidade. O ServiceDiscoveryBehavior comportamento permite a descoberta de todos os pontos de extremidade de um serviço e permite especificar pontos de extremidade de anúncio. O exemplo a seguir mostra como adicionar e especificar um ponto de extremidade de ServiceDiscoveryBehavior anúncio.

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

Depois de especificar o comportamento, faça referência a ele a partir de um <service> elemento como mostrado no exemplo a seguir.

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

Para que um serviço seja detetável, você também deve adicionar um ponto de extremidade de descoberta, o exemplo acima adiciona um ponto de UdpDiscoveryEndpoint extremidade padrão.

Ao adicionar pontos de extremidade de anúncio, <services> você também deve adicionar um serviço de ouvinte de anúncio ao elemento , conforme mostrado no exemplo a seguir.

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

O EndpointDiscoveryBehavior comportamento é usado para habilitar ou desabilitar a descoberta de um ponto de extremidade específico. O exemplo a seguir configura um serviço com dois pontos de extremidade de aplicativo, um com descoberta habilitada e outro com descoberta desabilitada. Para cada ponto de extremidade, um EndpointDiscoveryBehavior comportamento é adicionado.

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

O EndpointDiscoveryBehavior comportamento também pode ser usado para adicionar metadados personalizados aos metadados do ponto de extremidade retornados pelo serviço. O exemplo a seguir mostra como fazer isso.

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

O EndpointDiscoveryBehavior comportamento também pode ser usado para adicionar escopos e tipos que os clientes usam para pesquisar serviços. O exemplo a seguir mostra como fazer isso em um arquivo de configuração do lado do cliente.

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

Para obter mais informações sobre ServiceDiscoveryBehavior e EndpointDiscoveryBehavior consulte Visão geral da descoberta do WCF.

Configuração do elemento de vinculação

A configuração do elemento de vinculação é mais interessante no lado do cliente. Você pode usar a configuração para especificar os critérios de localização usados para descobrir serviços de um aplicativo cliente WCF. O exemplo a seguir cria uma associação personalizada com o DiscoveryClient canal e especifica critérios de localização que incluem um tipo e escopo. Além disso, especifica valores para as Duration propriedades e 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>

Essa configuração de vinculação personalizada deve ser referenciada por um ponto de extremidade do cliente:

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

Para obter mais informações sobre critérios de localização, consulte Discovery Find e FindCriteria. Para obter mais informações sobre elementos de descoberta e vinculação, consulte Visão geral da descoberta do WCF

Configuração de ponto final padrão

Pontos de extremidade padrão são pontos de extremidade predefinidos que têm valores padrão para uma ou mais propriedades (endereço, vinculação ou contrato) ou um ou mais valores de propriedade que não podem ser alterados. O .NET 4 é fornecido com 3 pontos de extremidade padrão relacionados à descoberta: UdpDiscoveryEndpoint, UdpAnnouncementEndpointe DynamicEndpoint. O UdpDiscoveryEndpoint é um ponto de extremidade padrão pré-configurado para operações de descoberta em uma associação de multicast UDP. O UdpAnnouncementEndpoint é um ponto de extremidade padrão pré-configurado para enviar mensagens de anúncio por meio de uma associação UDP. O DynamicEndpoint é um ponto de extremidade padrão que usa a descoberta para localizar o endereço de ponto de extremidade de um serviço descoberto dinamicamente em tempo de execução. As associações padrão são especificadas com um elemento que contém o <endpoint> atributo kind que especificou o tipo de ponto de extremidade padrão a ser adicionado. O exemplo a seguir mostra como adicionar um UdpDiscoveryEndpoint e um UdpAnnouncementEndpoint.

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

Os pontos de extremidade padrão são configurados em um <standardEndpoints> elemento . O exemplo a seguir mostra como configurar o UdpDiscoveryEndpoint e o 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>

Depois de adicionar a configuração de ponto de extremidade padrão, faça referência à <endpoint> configuração no elemento para cada ponto de extremidade, conforme mostrado no exemplo a seguir.

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

Ao contrário dos outros pontos de extremidade padrão usados na descoberta, você especifica uma vinculação e um contrato para DynamicEndpointo . O exemplo a seguir mostra como adicionar e configurar um DynamicEndpointarquivo .

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

Para obter mais informações sobre pontos de extremidade padrão, consulte Pontos de extremidade padrão.