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