Compartir a través de


Búsqueda de detección y FindCriteria

Un cliente inicia una operación de descubrimiento para descubrir uno o varios servicios y es una de las principales acciones de descubrimiento. Al realizar una búsqueda, se envía un mensaje de sondeo de WS-Discovery a través de la red. Servicios que coinciden con los criterios especificados responden con los mensajes WS-Discovery ProbeMatch. Para obtener más información sobre los mensajes de detección, consulte la especificaciónWS-Discovery.

DiscoveryClient

La DiscoveryClient clase proporciona el mecanismo para realizar operaciones de búsqueda y facilita la realización de operaciones de cliente de detección. Contiene un Find método , que realiza una búsqueda sincrónica (de bloqueo) y un FindAsync método , que inicia una búsqueda asincrónica sin bloqueo. Ambos métodos toman un FindCriteria parámetro y proporcionan resultados al usuario a través de un FindResponse objeto .

CriteriosDeBúsqueda

FindCriteria tiene varias propiedades, que se pueden agrupar en criterios de búsqueda, que especifican los servicios que busca y buscan criterios de terminación (cuánto tiempo debe durar la búsqueda). Un FindCriteria puede contener varios criterios de búsqueda. De forma predeterminada, el servicio debe coincidir con todos los componentes; de lo contrario, no se considera un servicio coincidente. Si desea buscar servicios que solo coincidan con algunos de los criterios, puede implementar lógica de búsqueda personalizada en el servicio o puede usar varias consultas.

Los criterios de búsqueda incluyen:

  • ContractTypeNameElement -Opcional. Nombre del contrato del servicio que se busca y los criterios que se usan normalmente al buscar un servicio. Si se especifica más de un nombre de contrato, solo responden los puntos de conexión de servicio que coinciden con TODOS los contratos. Tenga en cuenta que en WCF un punto de conexión solo puede admitir un contrato.

  • ScopeElement -Opcional. Los ámbitos son URI absolutos que se usan para categorizar puntos de conexión de servicio individuales. Es posible que quiera usar esto en escenarios en los que varios puntos de conexión exponen el mismo contrato y quiere una manera de buscar un subconjunto de los puntos de conexión. Si se especifica más de un ámbito, solo se responden todos los puntos de conexión de servicio que coinciden con TODOS los ámbitos.

  • ScopeMatchBy : especifica el algoritmo de coincidencia a usar para hacer coincidir los ámbitos del mensaje de sondeo con los del punto de conexión. Hay cinco reglas de coincidencia de ámbito admitidas:

    Si no se especifica una regla de coincidencia de ámbito, ScopeMatchByPrefix se usa .

Los criterios de terminación incluyen:

  1. Duration - El tiempo máximo para esperar respuestas de los servicios de la red. La duración predeterminada es de 20 segundos.

  2. MaxResults - Número máximo de respuestas que se van a esperar. Si se reciben respuestas MaxResults antes de que Duration haya transcurrido, finaliza la operación de búsqueda.

FindResponse

FindResponse tiene una Endpoints propiedad de colección que contiene las respuestas enviadas por los servicios coincidentes en la red. Si ningún servicio respondió, la colección está vacía. Si uno o varios servicios respondieron, cada respuesta se almacena en un EndpointDiscoveryMetadata objeto , que contiene la dirección, el contrato y alguna información adicional sobre el servicio.

En el ejemplo siguiente se muestra cómo realizar una operación de búsqueda en el código.

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

// Create FindCriteria
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));
findCriteria.Duration = TimeSpan.FromSeconds(10);

// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(findCriteria);

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)

Consulte también