En otras entradas, la verdad que de hace un pequeño tiempo, hicimos alguna introducción a las novedades que la siguiente versión de WCF 4.0 incorporará en Visual Studio 2010, de entre la lista de novedades seguramente una que llamará mucho la atención y que será de uso frecuente en nuestros desarrollos es la implementación de WS-Discovery, vista y tratada en las entradas siguientes, WS-Discovery Parte I y WS-Discovery Parte II
A lo largo de la siguiente entrada tocaremos también algo relacionado con esta implementación, pero en este caso mediante DynamicEndpoint. Como su nombre indica, DynamicEndpoint representa un extremo capaz de direccionarse automáticamente, y utiliza para ello la implementación de WS-Discovery realizada en WCF 4.0. Al igual que las clases vistas en las entradas anteriores lo primero que necesitamos es un criterio de búsqueda, algo que por regla general se hace en base al contrato que implementa el servicio que queremos buscar.
1 2 3 4 |
<font color="#0000ff">DynamicEndpoint</font> dynamicEndpoint = <span class="kwrd">new</span> <font color="#0000ff">DynamicEndpoint</font>( ContractDescription.GetContract(<span class="kwrd">typeof</span>(ICalculatorService)), <span class="kwrd">new</span> NetTcpBinding()); CalculatorServiceClient client = <span class="kwrd">new</span> CalculatorServiceClient(dynamicEndpoint); |
Con este sencillo paso y de forma automática para todos los servicios que usen las capacidades de descubrimiento ya tendremos disponible nuestro proxy de cliente sin necesidad de saber de antemano la dirección física en la que están expuestos los servicios a los que nos queremos comunicar.
Otra de las features que nos permite DynamicEndpoint es la de hacer búsquedas de nuestros servicios en función de ámbitos de los mismos. Imagínese que usted ha creado un servicio de WCF para impresión y que este servicio está repetido dentro de la red de una empresa por muchas plantas, por supuesto, cada uno para trabajar con una impresora de la planta concreta. Si hicieramos uso de DynamicEndpoint este nos devolvería el extremo del primer servicio descubierto, pero que puede que no fuera del que quisiéramos hacer uso. Para resolver este problema, dentro de los comportamientos de nuestros extremos podremos agregar uno nuevo conocido como endPointDiscoveryBehavior el cual nos permitirá establecer en la configuración de despliegue de un servicio el ámbito del mismo. Este ámbito puede ser una dirección URI, una dirección LDAP o bien un identificador único tal y como podemos ver en la documentación de MSDN al respecto. El siguiente fragmento XML podemos ver un comportamiento de extremo con soporte para ámbitos de descubrimiento.
1 2 3 4 5 6 7 8 9 |
<endpointBehaviors> <behavior name=<span class="str">"discoveryScopeBehavior"</span>> <endpointDiscovery> <scopes> <add scope=<span class="str">"http://www.microsoft.com"</span> /> </scopes> </endpointDiscovery> </behavior> </endpointBehaviors> |
Ahora, si queremos que nuestro DynamicEndpoint se base en un ámbito concreto para la búsqueda solamente tendremos que incluir en la propiedad Scopes de su elemento FindCriteria, los ámbitos concretos que hay que buscar en la red.
Para todos aquellos que deseeis ver algun ejemplo concreto sobre este tema y alguno más relacionado con las novedades de WCF os recomiendo descargaros los Samples de WCF 4.0 para Visual Studio 2010 Beta 2
Saludos
Unai