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.
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:
FindCriteria.ScopeMatchByExact realiza una comparación básica de cadenas con distinción entre mayúsculas y minúsculas.
FindCriteria.ScopeMatchByPrefix coincide con segmentos separados por "/". Una búsqueda de
http://contoso/building1coincide con un servicio con el ámbitohttp://contoso/building/floor1. Tenga en cuenta que no coincidehttp://contoso/building100porque los dos últimos segmentos no coinciden.FindCriteria.ScopeMatchByLdap coincide con ámbitos por segmentos mediante una dirección LDAP URL.
FindCriteria.ScopeMatchByUuid coincide con ámbitos que usan una cadena del UUID exactamente.
FindCriteria.ScopeMatchByNone coincide solo con los servicios que no especifican un ámbito.
Si no se especifica una regla de coincidencia de ámbito, ScopeMatchByPrefix se usa .
Los criterios de terminación incluyen:
Duration - El tiempo máximo para esperar respuestas de los servicios de la red. La duración predeterminada es de 20 segundos.
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)