Muy buenas de nuevo, siento haber estado desaparecido una temporada, pero como mi madre dice “En misa y repicando”, ¡no,no,no…! jejeje…

En fin, en esta ocasión y antes de comentar varios casos sobre WCF (Windows Communication Foundation),voy a hacer mención a varias de las herramientas que nos van a permitir poder trabajar un poquito mejor. Para hacer más fácil su uso y comprensión, ¡que mejor que hacer un pequeño ejemplo y ver su funcionamiento!.

  1. En primer lugar creamos un proyecto “WCF Service Application”.
  2. Publicamos el Web service en nuestro IIS: Ej: en http://localhost/WcfService1/ .
  3. Comprobamos el acceso al servicio desde iexplorer: http://localhost/wcfservice1/service1.svc
  4. Hasta aquí, todo perfecto, todo funciona, perfectamente. Nota: Al publicar un servicio por primera vez, la la autenticación se establece como “anónima”.
  5. Ahora veamos como configurar nuestro servicio. “WCF Service Configuration Editor”.   Por defecto una vez creado el servicio, el Binding es “wsHttpBinding” para nuestro Services – EndPoint

Con Internet Explorer, todo funciona correctamente, si creamos una aplicación de consola (en 3.0 ó 3.5) y añadimos una referencia a nuestro WCF Service “Add Service Reference” se crea una clase proxy y listo. Poco hemos hecho hasta este momento, jejeje… ¡vamos por buen camino!

Ahora utilizando la siguiente herramienta, podremos chequear nuestro WCF Service sin necesidad de tener que crear una aplicación de test como la anterior, además podremos visualizar todas las peticiones y respuestas de tipo SOAP.

WcfTestClient

C:\Development\WCF\Samples\WcfService1>wcftestclient http://localhost/WcfService1/Service1.svc

Todo sigue funcionando correctamente y hemos chequeado la funcionalidad del WCF Service. Ya tenemos todo apunto.

NOTA: Ni que decir tiene que el servicio que se quiere testear ha de estar en ejecución, de lo contrario un error amenizará la ocasión, jijiji…

 

Ahora otra forma de hostear nuestro Web Service:

WcfServiceHost

¿Porque necesito “obligatoriamente” hostear mi WCF service en IIS?, pues bien, con esta herramienta proporcionada por WCF no será necesario, simplemente diferente a como estamos acostumbrados, podemos evitar el tener que instalar IIS, bien porque no queremos o no tenemos el CD/DVD correspondiente o, simplemente debido a las prisas, cosa que suele ser bastante común, jejeje…

Asegura de que el servicio no está hosteado en IIS para que no existan conflictos, también hay que estar seguro de que la propiedad Address del Endpoint del servicio tiene el valor “http://localhost/Wcfservice1/service1.svc“, seguidamente tecleamos:

C:\Develpment\WCF\Samples\WcfService1> wcfsvchost /service:"./bin/WcfService1.dll" /config:web.config

Tras ejecutar este comando se carga el WCF Service en la herramienta, pero ¿Que ocurre?, pues que tenemos un error:

1 System.InvalidOperationException: The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the HttpGetUrl property is a relative address, but there is no http base address. Either supply an http base address or set HttpGetUrl to an absolute address. 2 at System.ServiceModel.Description.ServiceMetadataBehavior.EnsureGetDispatcher(ServiceHostBase host, ServiceMetadataExtension mex, Uri url, String scheme) 3 at System.ServiceModel.Description.ServiceMetadataBehavior.CreateHttpGetEndpoints(ServiceDescription description, ServiceHostBase host, ServiceMetadataExtension mex) 4 at System.ServiceModel.Description.ServiceMetadataBehavior.System.ServiceModel.Description.IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase) 5 at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) 6 at System.ServiceModel.ServiceHostBase.InitializeRuntime() 7 at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) 8 at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 9 at System.ServiceModel.Channels.CommunicationObject.Open() 10 at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)

Utilizamos el editor de configuración de WCF (SvcConfigEditor) y  asignamos el valor http://localhost/WcfService1/Service1.svc a la propiedad  HttpGetUrl según muestro en la siguiente imagen:

 

Si  ahora intentamos ejecutar de nuevo la instrucción veremos como el WCF Service es iniciado correctamente. En este momento ya lo tenemos nuevamente “hosteado”.

También existe la posibilidad de lanzar estas dos aplicaciones “Servidor/Host” y “Cliente/Client” de una sóla “atacada”,😀

C:\Develpment\WCF\Samples\WcfService1> wcfsvchost /service:"./bin/WcfService1.dll" /config:web.config /client: MyClient.exe /clientArgs:123456, abcdef

 

Trazas – SvcTraceViewer

Esta herramienta con una interfaz gráfica que se distribuye con WCF, aunque por otro lado “no estoy seguro”, parece que con algunas versiones de VSTS si es así, no obstante, con el SDK de Windows se distribuye y  en cualquier caso, aquí os dejo un “.zip” con dicha herramienta.

El objetivo de esta es mostrar la información almacenada en los ficheros “.svclog”, que son generados por el “Service.Model” configurado en los web.config de los WCF Services; un fichero de mensajes y otro de trazas.

Referencia: http://msdn2.microsoft.com/en-us/library/ms732023.aspx 

Existe otra herramienta de terceros “Live Service Trace Viewer” (http://blogs.msdn.com/craigmcmurtry/archive/2006/09/19/762689.aspx) que a pesar de mostrar la misma información (.svclog) lo hace de una forma mucho más gráfica y “quizás” más intuitiva.

Como vemos  WCF está comenzando a dar mucho juego y por supuesto a facilitarnos mucho el trabajo, en fin, mientras sea así, todo será bienvenido,😀

 

Espero haber sido de ayuda una vez más.
Saludos y hasta la próxima.
Juanlu