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