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 este ejemplo se muestra el uso de un archivo de configuración para hacer que un servicio se pueda detectar.
![]() |
---|
En este ejemplo se implementa la detección en la configuración. Para obtener un ejemplo que implementa la detección en el código, vea Ejemplo básico. |
![]() |
---|
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.
<InstallDrive>:\WF_WCF_Samples
Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Discovery\Configuration
|
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 UdpDiscoveryEndpoint estándar.
Ajustar la información relacionada con la detección para el extremo de la aplicación del servicio y ajustar algunos de los valores relacionados con la detección en el extremo estándar.
Para habilitar la detección, se deben realizar dos modificaciones en el archivo de configuración de la aplicación para el servicio:
Un extremo de detección se debe agregar al elemento
<service>
. Se trata de un extremo UdpDiscoveryEndpoint estándar. Este es un extremo del sistema que el tiempo de ejecución asocia al servicio de detección. El servicio de descarga realiza escuchas de los mensajes en este extremo.Se agrega un comportamiento
<serviceDiscovery>
a la sección<serviceBehaviors>
. Esto permite detectar el servicio en tiempo de ejecución runtime y utiliza el extremo de la detección mencionado previamente para realizar escuchas de Probe de detección y mensajes Resolve. Con estas dos incorporaciones, el servicio se puede detectar en el extremo de detección especificado.
Este archivo de configuración supera esos pasos sencillos al modificar comportamientos adicionales. Es posible controlar la información relacionada con la detección utilizando extremos concretos. Es decir, un usuario puede controlar si se puede detectar un extremo y también puede marcar ese extremo con metadatos XML personalizados y la propiedad Scopes. Para ello, el usuario debe agregar una propiedad behaviorConfiguration
al extremo de la aplicación. En este caso, la siguiente propiedad se agrega al extremo 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 extremo de la aplicación.
También puede controlar detalles concretos del extremo de la detección. Esto se hace a través de StandardEndpointsSection. En este ejemplo, se modifica la versión del protocolo utilizada además de agregar un atributo maxResponseDelay
en el siguiente ejemplo de código.
<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>
Configuración del cliente
En el archivo de configuración de la aplicación para el cliente, para la detección se usa el standardEndpoint
de tipo dynamicEndpoint
. Cuando un cliente utiliza un dynamicEndpoint
, el tiempo de ejecución realiza la detección automáticamente. Durante la detección se usan varias opciones de configuración predeterminadas, como discoveryClient
, que busca un servicio que coincida con el contrato especificado por el cliente usando un extremo udpDiscovery estándar. Este ejemplo extiende esta característica y modifica el objeto FindCriteria utilizado por el cliente, así como algunas propiedades del updDiscoveryEndpoint
estándar que se usa en 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 el modo en que un cliente puede enviar elementos XML mediante mensajes Probe
. Por último, se realizan algunos cambios en UdpDiscoveryEndpoint, como la versión del protocolo utilizado y los valores específicos del UDP, como se muestra en el siguiente archivo de configuración.
<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>
Para utilizar este ejemplo
Este ejemplo utiliza los extremos HTTP y para ejecutarlo se deben agregar las ACL de dirección URL apropiadas; vea Configurar HTTP y HTTPS para obtener detalles. Al ejecutar el siguiente comando con privilegios elevados, se deberían agregar las ACL adecuadas. Puede que desee sustituir su dominio y nombre de usuario para los siguientes argumentos si el comando no funciona como debería.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Compile la solución.
Ejecute el ejecutable de servicio desde el directorio de compilación.
Ejecute la aplicación cliente. Observe que el cliente puede localizar el servicio.