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


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

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

Dd483343.note(ru-ru,VS.100).gifПримечание
Данный образец реализует возможность обнаружения в конфигурации. Образец реализации возможности обнаружения в коде см. в разделе Базовый образец.

Dd483343.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге:

<диск_установки>:\WF_WCF_Samples\WCF\Basic\Discovery\Configuration

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

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

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

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

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

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

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

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

behaviorConfiguration="endpointBehaviorConfiguration"

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

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

<configuration>
    <system.serviceModel>

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

      <behaviors>

        <serviceBehaviors>
          <behavior name="calculatorServiceBehavior">
            <serviceDiscovery/>
          </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
          <behavior name="endpointBehaviorConfiguration">

            <endpointDiscovery>
              <scopes>
                <add scope="http://www.example.org/calculator"/>
                <add scope="ldap:///ou=engineering,o=exampleorg,c=us"/>
              </scopes>
            </endpointDiscovery>

          </behavior>          
        </endpointBehaviors>

      </behaviors>

      <standardEndpoints>
        <udpDiscoveryEndpoint>
          <!-- Specify the discovery protocol version and maxResponseDelay -->
          <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />  
        </udpDiscoveryEndpoint>
      </standardEndpoints>

    </system.serviceModel>
</configuration>

Конфигурация клиента

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

<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="https://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
              <scopes>
                <add scope="https://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>

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

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

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

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

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