Поделиться через


Образец конфигурации

В примере конфигурации показано использование файла конфигурации для обнаружения службы.

Конфигурация службы.

Файл конфигурации в данном образце иллюстрирует две возможности.

  • Обеспечение доступности обнаружения службы через стандартную конечную точку UdpDiscoveryEndpoint.

  • Настройка сведений, связанных с обнаружением для конечной точки приложения службы, и настройка некоторых параметров, связанных с обнаружением, в стандартной конечной точке.

Чтобы включить функцию обнаружения, в файле конфигурации приложения службы необходимо произвести следующие изменения.

  • Необходимо добавить конечную точку обнаружения к элементу <service>. Это стандартная конечная точка UdpDiscoveryEndpoint. Это системная конечная точка, которую среда выполнения связывает со службой обнаружения. Служба обнаружения использует эту конечную точку для прослушивания сообщений.

  • Добавим поведение <serviceDiscovery> в раздел <serviceBehaviors>. Это позволяет службе обнаруживать во время выполнения и использовать конечную точку обнаружения, упоминание ранее для прослушивания обнаружения Probe и Resolve сообщений. После выполнения этих двух добавлений служба доступна для обнаружения на указанной конечной точке обнаружения.

В следующем фрагменте конфигурации показана служба с указанной конечной точкой приложения и конечной точкой обнаружения.

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

Чтобы воспользоваться объявлениями, необходимо добавить конечную точку объявления. Для этого нужно изменить файл конфигурации, как показано в следующем коде.

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

При добавлении конечной точки объявления к службе обнаружения создается клиент объявления по умолчанию для службы. Это гарантирует, что служба отправит объявление о режиме «в сети» или «не в сети» соответственно при открытии и закрытии службы.

Можно не ограничиваться приведенными простыми шагами и изменить в файле конфигурации дополнительные поведения. Информацией, относящейся к обнаружению, можно управлять с использованием определенных конечных точек. Таким образом пользователь может указать, доступна ли конечная точка для обнаружения, а также пометить ее атрибутом Scopes и добавить пользовательские XML-метаданные. Для этого необходимо добавить в конечную точку приложения свойство behaviorConfiguration. В этом случае в конечную точку приложения добавляется следующее свойство.

behaviorConfiguration="endpointBehaviorConfiguration"

Теперь с помощью элемента конфигурации поведения можно управлять атрибутами, связанными с обнаружением. В этом случае в конечную точку приложения добавляются две области.

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

Дополнительные сведения о область см. в разделе "Поиск обнаружения" и "НайтиCriteria".

Можно также управлять определенными сведениями о конечной точке обнаружения. Это выполняется с помощью объекта StandardEndpointsSection. В данном образце изменяется версия используемого протокола, а также добавляется атрибут maxResponseDelay, как показано в следующем примере кода.

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

Далее приведен полный листинг файла конфигурации, используемого в этом примере.

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

Настройка клиента

Для включения функции обнаружения в конфигурации приложения для клиента используется конечная точка standardEndpoint типа dynamicEndpoint, как показано в следующем фрагменте.

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

Если клиент использует конечную точку типа dynamicEndpoint, обнаружение осуществляется средой выполнения автоматически. Во время обнаружения используются различные параметры, такие как те, которые определены в discoveryClientSettings разделе, который указывает тип конечной точки обнаружения для использования:

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

Данный образец расширяет эту возможность и изменяет используемый клиентом объект FindCriteria, а также некоторые свойства стандартной конечной точки updDiscoveryEndpoint, применяемой для обнаружения. Измененный объект FindCriteria использует область и указанный алгоритм scopeMatchBy, а также пользовательские критерии завершения. Кроме того, образец также показывает, как клиент может отправлять XML-элементы с помощью сообщений Probe. Наконец, вносятся некоторые изменения в конечную точку UdpDiscoveryEndpoint. В частности, меняется версия используемого протокола и параметры UDP, как показано в приведенном далее файле конфигурации.

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

Далее приведен полный листинг конфигурации клиента для этого образца.

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

Использование этого образца

  1. В этом образце используются конечные точки HTTP, и для работы этого образца необходимо добавить соответствующие списки управления доступом по URL-адресу. Дополнительные сведения см. в разделе "Настройка HTTP и HTTPS". Нужные списки управления доступом будут добавлены после выполнения следующей команды с повышенными привилегиями. Если команда не работает, следует указать домен и имя пользователя в следующих аргументах. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Постройте решение.

  3. Выполните исполняемый файл службы из каталога сборки.

  4. Выполните исполняемый файл клиента. Учтите, что клиент может определить расположение службы.