Compartir a través de


Criterios de búsqueda personalizados

En el ejemplo CustomFindCriteria se muestra cómo crear una coincidencia de ámbito personalizado mediante lógica y cómo implementar un servicio de detección personalizado. Los clientes utilizan la funcionalidad de concordancia de ámbito personalizada para refinar y seguir usando la funcionalidad de búsqueda proporcionada por la detección WCF. El escenario que trata este ejemplo es el siguiente:

  1. Un cliente busca un servicio de calculadora.

  2. Para refinar su búsqueda, el cliente debe usar una regla de coincidencia de ámbito personalizada.

  3. Según esta regla, un servicio responde al cliente si su punto de conexión coincide con cualquiera de los ámbitos especificados por el cliente.

Demostraciones

  • Creación de un servicio de detección personalizado.

  • Implementar una coincidencia del ámbito personalizada por algoritmo.

Discusión

El cliente busca criterios de coincidencia tipo "OR". Un servicio responde si los ámbitos de sus puntos de conexión coinciden con cualquiera de los ámbitos proporcionados por el cliente. En este caso, el cliente busca un servicio de calculadora que tenga cualquiera de los ámbitos de la lista siguiente:

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

Para lograr esto, el cliente dirige los servicios para que utilicen una regla de coincidencia de ámbito personalizada mediante la transmisión de una coincidencia de ámbito personalizada a través del URI. Para facilitar la coincidencia de ámbitos personalizados, el servicio debe usar un servicio de detección personalizado que comprenda la regla de coincidencia de ámbito personalizado e implemente la lógica de coincidencia asociada.

En el proyecto de cliente, abra el archivo Program.cs. Tenga en cuenta que el ScopeMatchBy campo del FindCriteria objeto se establece en un URI específico. Este identificador se envía al servicio. Si el servicio no entiende esta regla, omite la solicitud de búsqueda del cliente.

Abra el proyecto de servicio. Se usan tres archivos para implementar el servicio de detección personalizada:

  1. AsyncResult.cs: esta es la implementación de la AsyncResult que requieren los métodos de detección.

  2. CustomDiscoveryService.cs: este archivo implementa el servicio de detección personalizado. La implementación extiende la DiscoveryService clase e invalida los métodos necesarios. Observe la implementación del método OnBeginFind. El método comprueba si la regla de coincidencia de ámbito personalizado fue especificada por el cliente. Este es el mismo URI personalizado que el cliente especificó anteriormente. Si se especifica la regla personalizada, se sigue la ruta de acceso al código que implementa la lógica de coincidencia "OR".

    Esta lógica personalizada pasa por todos los ámbitos de cada uno de los puntos de conexión que el servicio tiene. Si alguno de los ámbitos del punto de conexión coincide con cualquiera de los ámbitos proporcionados por el cliente, el servicio de detección agrega ese punto de conexión a la respuesta que se devuelve al cliente.

  3. CustomDiscoveryExtension.cs: el último paso para implementar el servicio de detección es conectar esta implementación del servicio de detección personalizado al host de servicio. La clase auxiliar que se usa aquí es la CustomDiscoveryExtension clase . Esta clase extiende la DiscoveryServiceExtension clase . El usuario debe invalidar el GetDiscoveryService método . En este caso, el método devuelve una instancia del servicio de detección personalizado que se creó antes. PublishedEndpoints es un ReadOnlyCollection<T> que contiene todos los puntos de conexión de la aplicación que se agregan al ServiceHost. El servicio de detección personalizada lo usa para rellenar su lista interna. Un usuario también puede agregar otros metadatos de punto de conexión.

Por último, abra Program.cs. Tenga en cuenta que tanto ServiceDiscoveryBehavior como CustomDiscoveryExtension se agregan al host. Una vez hecho esto y el host tiene un punto de conexión sobre el que recibir mensajes de detección, la aplicación puede usar el servicio de detección personalizado.

Observe que el cliente puede encontrar el servicio sin conocer su dirección.

Para configurar, compilar y ejecutar el ejemplo

  1. Abra la solución que contiene el proyecto.

  2. Compile el proyecto.

  3. Ejecute la aplicación de servicio.

  4. Ejecute la aplicación cliente.