Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo de configuración se muestra el uso de un archivo de configuración para que un servicio sea reconocible.
Configuración del servicio
El archivo de configuración de este ejemplo muestra dos características:
Hacer que el servicio se pueda detectar a través de un estándar UdpDiscoveryEndpoint.
Ajustando la información relacionada con la detección para el punto de conexión de la aplicación del servicio y ajustando algunas de las opciones de configuración relacionadas con la detección en el punto de conexión estándar.
Para habilitar la detección, se deben realizar algunos cambios en el archivo de configuración de la aplicación para el servicio:
Se debe agregar un endpoint de descubrimiento al
<service>elemento. Se trata de un punto de conexión estándar UdpDiscoveryEndpoint . Se trata de un punto de conexión del sistema que el tiempo de ejecución asocia al servicio de detección. El servicio de detección escucha mensajes en este punto de conexión.Se agrega un comportamiento
<serviceDiscovery>a la sección<serviceBehaviors>. Esto permite que el servicio se detecte en tiempo de ejecución y use el punto de conexión de descubrimiento mencionado anteriormente para escuchar mensajes deProbedetección yResolve. Con estas dos adiciones, el servicio se puede detectar en el endpoint de descubrimiento especificado.
El siguiente fragmento de código de configuración muestra un servicio con un punto de conexión de aplicación y un punto de conexión de detección definido:
<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>
Para beneficiarse de los anuncios, tendrá que agregar un extremo de anuncio. Para ello, modifique el archivo de configuración como se muestra en el código siguiente.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
Al agregar un punto de conexión de anuncio al comportamiento del servicio de detección, se crea un cliente de anuncio predeterminado para el servicio. Esto garantiza que el servicio enviará un anuncio en línea y sin conexión cuando el servicio se abra y se cierre respectivamente.
Este archivo de configuración va más allá de esos sencillos pasos modificando comportamientos adicionales. Es posible controlar la información relacionada con la detección mediante puntos de conexión específicos. Es decir, un usuario puede controlar si un punto de conexión se puede descubrir y también puede marcar ese punto de conexión con Scopes y metadatos XML personalizados. Para ello, el usuario debe agregar una behaviorConfiguration propiedad al punto de conexión de la aplicación. En este caso, se agrega la siguiente propiedad al punto de conexión de la aplicación.
behaviorConfiguration="endpointBehaviorConfiguration"
Ahora, a través del elemento de configuración de comportamiento, puede controlar los atributos relacionados con la detección. En este caso, se agregan dos ámbitos al punto de conexión de la aplicación.
<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>
Para obtener más información sobre los ámbitos, consulte Discovery Find y FindCriteria.
También puede controlar detalles concretos del punto de conexión de la detección. Esto se realiza a través de StandardEndpointsSection. En este ejemplo, se modifica la versión del protocolo usado, así como la adición de un maxResponseDelay atributo como se muestra en el ejemplo de código siguiente.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
A continuación se muestra el archivo de configuración completo que se usa en este ejemplo:
<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>
Configuración del cliente
En el archivo de configuración de la aplicación para el cliente, se usa un standardEndpoint de tipo dynamicEndpoint para usar la detección, como se muestra en el siguiente fragmento de código de configuración.
<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>
Cuando un cliente usa un dynamicEndpoint, el entorno de ejecución realiza la detección automáticamente. Se usan varias opciones de configuración durante la detección, como las definidas en la discoveryClientSettings sección , que especifica el tipo de punto de conexión de detección que se va a usar:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Criterios de búsqueda usados para buscar servicios:
<!-- 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>
En este ejemplo se amplía esta característica y se modifica el FindCriteria usado por el cliente, así como algunas propiedades del estándar updDiscoveryEndpoint usado para la detección. Los FindCriteria se modifican para utilizar un ámbito y un algoritmo scopeMatchBy concreto, así como los criterios de terminación personalizados. Además, el ejemplo también muestra cómo un cliente puede enviar elementos XML mediante Probe mensajes. Por último, se realizan algunos cambios en UdpDiscoveryEndpoint, como la versión del protocolo utilizado y la configuración específica de UDP, como se muestra en el siguiente archivo de configuración.
<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>
A continuación se muestra la configuración de cliente completa que se usa en el ejemplo.
<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>
Para utilizar este ejemplo
En este ejemplo se usan puntos de conexión HTTP y para ejecutar este ejemplo, se deben agregar ACL de dirección URL adecuadas. Para obtener más información, consulte Configuración de HTTP y HTTPS. Al ejecutar el siguiente comando con privilegios elevados, debe agregar las ACL adecuadas. Es posible que quiera sustituir el dominio y el nombre de usuario por los argumentos siguientes si el comando no funciona tal como está.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Compile la solución.
Ejecute el ejecutable del servicio desde el directorio de compilación.
Ejecute el archivo ejecutable del cliente. Tenga en cuenta que el cliente puede localizar el servicio.