Образец конфигурации
Этот образец демонстрирует, как при помощи файла конфигурации можно сделать службу доступной для обнаружения.
![]() |
---|
Данный образец реализует возможность обнаружения в конфигурации. Образец реализации возможности обнаружения в коде см. в разделе Базовый образец. |
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\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>
Использование этого образца
В этом образце используются конечные точки HTTP, и для работы этого образца необходимо добавить соответствующие списки управления доступом по URL-адресу. Дополнительные сведения см. в разделе Настройка HTTP и HTTPS. Нужные списки управления доступом будут добавлены после выполнения следующей команды с повышенными привилегиями. Если команда не работает, следует указать домен и имя пользователя в следующих аргументах.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Постройте решение.
Выполните исполняемый файл службы из каталога сборки.
Выполните исполняемый файл клиента. Учтите, что клиент может определить расположение службы.