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.
La detección de WCF consta de un conjunto de tipos que proporcionan un modelo de programación unificado que permite escribir servicios que se pueden detectar en tiempo de ejecución y clientes que encuentran y usan estos servicios.
Hacer que un servicio sea reconocible y encontrar servicios
Para que un servicio WCF sea reconocible, agregue un ServiceDiscoveryBehavior elemento al ServiceDescription del host de servicio y agregue un punto de conexión de detección. Si un servicio está configurado para enviar mensajes de anuncio (agregando un AnnouncementEndpoint) el anuncio se envía cuando se abre y cierra el host del servicio.
Un cliente que desea escuchar mensajes de notificación del servicio aloja un servicio de anuncios y añade uno o más puntos de conexión para anuncios. El servicio de anuncio recibe mensajes de anuncio y genera eventos de anuncio.
Un cliente usa la DiscoveryClient clase para buscar servicios disponibles. La aplicación cliente crea instancias de la clase DiscoveryClient, pasando un punto de conexión de detección que especifica dónde se deben enviar los mensajes de detección. El cliente llama al Find método , que envía una Probe solicitud. Los servicios que realizan escuchas de los mensajes de detección reciben esta solicitud Probe. Si el servicio coincide con los criterios especificados en Probe, devuelve un ProbeMatch mensaje al cliente.
Modelo de objetos
La API de detección de WCF define las siguientes clases:
AnnouncementClient
La AnnouncementClient clase proporciona métodos sincrónicos y asincrónicos para enviar mensajes de anuncio. Hay dos tipos de mensajes de anuncio, Hello y Bye. Se envía un mensaje Hello para indicar que un servicio está disponible y se envía un mensaje bye para indicar que un servicio existente no está disponible. El desarrollador crea una instancia de AnnouncementClient, pasando una instancia de AnnouncementEndpoint como parámetro del constructor.
AnnouncementEndpoint
AnnouncementEndpoint representa un punto de conexión estándar con un contrato de anuncio fijo. Un servicio o cliente lo usa para enviar y recibir mensajes de anuncio. De forma predeterminada, la AnnouncementEndpoint clase se establece para usar la versión del protocolo WS_Discovery 11.
Servicio de Anuncios
AnnouncementService es una implementación proporcionada por el sistema de un servicio de anuncio que recibe y procesa mensajes de anuncio. Cuando se recibe un mensaje Hello o Bye, la instancia AnnouncementService llama al método virtual adecuado OnBeginOnlineAnnouncement o OnBeginOfflineAnnouncement, que genera eventos de anuncios.
DiscoveryClient
Una aplicación cliente usa la DiscoveryClient clase para buscar y resolver los servicios disponibles. Proporciona métodos sincrónicos y asincrónicos para buscar y resolver servicios basados en los especificados FindCriteria y ResolveCriteria respectivamente. El desarrollador crea una instancia de DiscoveryClient y proporciona una instancia de DiscoveryEndpoint como parámetro del constructor.
Para buscar un servicio, el desarrollador invoca el método sincrónico o asincrónico Find , que proporciona una FindCriteria instancia que contiene los criterios de búsqueda que se van a usar.
DiscoveryClient crea un Probe mensaje con los encabezados adecuados y envía la solicitud de búsqueda. Dado que puede haber más de una solicitud pendiente Find en cualquier momento, el cliente correlaciona las respuestas recibidas y valida la respuesta. A continuación, entrega los resultados al autor de llamada de la operación Find mediante FindResponse.
Para resolver un servicio conocido, el desarrollador invoca el método sincrónico o asincrónico Resolve que proporciona una instancia de ResolveCriteria que contiene el EndpointAddress del servicio conocido.
DiscoveryClient crea el Resolve mensaje con los encabezados adecuados y envía la solicitud de resolución. La respuesta recibida se correlaciona con las solicitudes de resolución pendientes y el resultado se entrega al solicitante de la operación Resolve utilizando ResolveResponse.
Si un proxy de detección está presente en la red y DiscoveryClient envía la solicitud de detección en modo de multidifusión, el proxy de detección puede responder con el mensaje Hola de supresión de multidifusión.
DiscoveryClient genera el evento ProxyAvailable cuando recibe mensajes de Hello en respuesta a solicitudes Find o Resolve pendientes. El evento ProxyAvailable contiene la clase EndpointDiscoveryMetadata sobre el proxy de detección. Es necesario que el desarrollador use esta información para cambiar del modo Ad hoc al administrado.
DiscoveryEndpoint
DiscoveryEndpoint representa un punto de conexión estándar con un contrato de detección fijo. Un servicio o cliente lo usa para enviar o recibir mensajes de detección. De forma predeterminada, DiscoveryEndpoint se establece para utilizar el modo ServiceDiscoveryMode.Managed y la versión WSDiscovery11 de WS-Discovery.
DiscoveryMessageSequenceGenerator
DiscoveryMessageSequenceGenerator se utiliza para generar un DiscoveryMessageSequence cuando el servicio envía mensajes de descubrimiento o anuncio.
DiscoveryService
La DiscoveryService clase abstracta proporciona un marco para recibir y procesar mensajes Probe y Resolve. Cuando se recibe un Probe mensaje, DiscoveryService crea una instancia de FindRequestContext basada en el mensaje entrante e invoca el OnBeginFind método virtual. Cuando se recibe un Resolve mensaje, DiscoveryService invoca el OnBeginResolve método virtual. Puede heredar de esta clase para proporcionar una implementación de Servicio de detección personalizada.
DiscoveryProxy
La DiscoveryProxy clase abstracta proporciona un marco para recibir y procesar mensajes de detección y anuncio. Hereda de esta clase cuando implementa un proxy de detección personalizado. Cuando un mensaje Probe se recibe en multidifusión, la clase DiscoveryProxy llama al método virtual BeginShouldRedirectFind para determinar si se debe enviar un mensaje de supresión de multidifusión. Si el desarrollador decide no enviar un mensaje de supresión de multidifusión o si el mensaje Probe se ha recibido en unidifusión, crea una instancia de la clase FindRequestContext basada en el mensaje entrante e invoca el método virtual OnBeginFind. Cuando se recibe un Resolve mensaje a través de multidifusión, la DiscoveryProxy clase invoca el ShouldRedirectResolve método virtual para determinar si debe enviarse un mensaje de supresión de multidifusión. Si el desarrollador decide no enviar un mensaje de supresión de multidifusión o si el mensaje Resolve se ha recibido en unidifusión, crea una instancia de la clase ResolveCriteria basada en el mensaje entrante e invoca el método virtual OnBeginResolve. Cuando se recibe un mensaje Hello o Bye, DiscoveryProxy llama al método virtual adecuado (OnBeginOnlineAnnouncement o OnBeingOfflineAnnouncement), que genera eventos de anuncio.
DiscoveryVersion
La DiscoveryVersion clase representa la versión del protocolo de detección que se va a usar.
EndpointDiscoveryBehavior
La EndpointDiscoveryBehavior clase se usa para controlar la detectabilidad de un punto de conexión, especificar las extensiones, nombres de tipo de contrato adicionales. y los ámbitos asociados a ese punto de conexión. Este comportamiento se agrega a un punto de conexión de la aplicación para configurar su EndpointDiscoveryMetadata. Cuando ServiceDiscoveryBehavior se agrega al host de servicio, todos los puntos de conexión de la aplicación hospedados por el host de servicio de forma predeterminada se pueden detectar. El desarrollador puede desactivar la detección de un punto de conexión específico estableciendo la propiedad Enabled en false.
EndpointDiscoveryMetadata
La EndpointDiscoveryMetadata clase proporciona una representación independiente de la versión de un punto de conexión publicado por el servicio. Contiene las direcciones de los extremos, los URI de escucha, los nombres del tipo de contrato, los ámbitos, la versión de metadatos y las extensiones especificados por el desarrollador del servicio. El FindCriteria enviado por el cliente durante una operación de Probe coincide con el EndpointDiscoveryMetadata. Si los criterios coinciden, EndpointDiscoveryMetadata se devuelve al cliente. La dirección del punto de conexión de ResolveCriteria coincide con la dirección del punto de conexión de EndpointDiscoveryMetadata. Si los criterios coinciden, EndpointDiscoveryMetadata se devuelve al cliente.
CriteriosDeBúsqueda
La FindCriteria clase es una clase independiente de la versión que se usa para especificar los criterios utilizados al buscar un servicio. Es totalmente compatible con los criterios definidos por WS-Discovery para los servicios coincidentes. También tiene extensiones que los desarrolladores pueden usar para especificar valores personalizados que se pueden usar durante el proceso de coincidencia. El desarrollador puede proporcionar los criterios de finalización para la Find operación especificando , MaxResultsque especifica el número total de servicios que busca el desarrollador o que especifica , Durationque es el valor que especifica cuánto tiempo espera el cliente para las respuestas.
FindRequestContext
Se crean instancias de la clase FindRequestContext mediante el servicio de detección en función del mensaje Probe que recibe cuando un cliente inicia una operación Find. Contiene una instancia de FindCriteria que el cliente especificó.
FindResponse
La clase FindResponse se devuelve al llamador de Find con las respuestas de la operación Find. También está presente en FindCompletedEventArgs. Contiene una colección de EndpointDiscoveryMetadata, que es la colección de puntos de conexión detectados y un diccionario de EndpointDiscoveryMetadata y DiscoveryMessageSequence.
ResolveCriteria
La ResolveCriteria clase es una clase independiente de la versión que se usa para especificar los criterios utilizados al resolver un servicio ya conocido. Contiene la dirección del punto de conexión del servicio conocido. El desarrollador puede proporcionar los criterios de terminación para la operación de resolución especificando , Durationque especifica cuánto tiempo espera el cliente para las respuestas.
ResolveResponse
La clase ResolveResponse se devuelve al realizador de la llamada del método Resolve con la respuesta de la operación Resolve. También está presente en ResolveCompletedEventArgs. Contiene una instancia de EndpointDiscoveryMetadata, que es los puntos de conexión detectados y una instancia de DiscoveryMessageSequence.
ServiceDiscoveryBehavior
La ServiceDiscoveryBehavior clase permite al desarrollador agregar la característica de detección a un servicio. Agregue este comportamiento a ServiceHost. La clase ServiceDiscoveryBehavior itera en los extremos de la aplicación agregados al host de servicio y crea una recopilación de EndpointDiscoveryMetadata de los extremos reconocibles. Todos los puntos de conexión se pueden detectar de forma predeterminada. La visibilidad de un punto de conexión determinado se puede controlar agregando el EndpointDiscoveryBehavior a ese punto de conexión en particular. Si se agregan puntos de conexión de anuncio a ServiceDiscoveryBehavior , el anuncio de todos los puntos de conexión detectables se envía a través de cada uno de los puntos de conexión de anuncio cuando se abre o cierra el host del servicio.
UdpAnnouncementEndpoint
La clase UdpAnnouncementEndpoint es un punto de conexión de anuncio estándar que se pre-configura para el anuncio en un enlace de multidifusión de UDP. De forma predeterminada, UdpAnnouncementEndpoint está configurado para usar la versión WSApril2005 de WS_Discovery.
UdpDiscoveryEndpoint
La clase UdpDiscoveryEndpoint es un punto de conexión de detección estándar que se pre-configura para la detección en un enlace de multidifusión de UDP. De forma predeterminada, DiscoveryEndpoint está configurado para usar la versión WSDiscovery11 WS-Discovery y el modo ServiceDiscoveryMode.Adhoc.