WCF – "ServiceModelReg -i"

Durante el día de ayer mientras trabajaba con WCF en una máquina virtual, tuve la necesidad de instalar Exchanger Server 2003 junto con OWA porque el proyecto en el que estoy en cierta forma lo requería, cual fue mi sorpresa cuando tras la instalación, los web services desarrollados con WCF (Framework 3.0) dejaron de funcionar. El error “The page cannot be display” o “Service Unavailable” ¿Por qué? ¿A que se debe esto?, pues bien, la respuesta es muy fácil,¡claro ahora que la conozco! Los ficheros “.svc” no son reconocidos, las ISAPI que tratan estos ficheros no se encuentran registradas y por tanto es necesario volverlas a registrar, jeje… ¡es lo que tiene el instalar y desinstalar cosas en las máquinas de desarrollo!

Estos son los pasos a realizar:

  • C:WINDOWSMicrosoft.NETFrameworkv2.0.50727Aspnet_regiis -i – enable. (Esta ya es bastante conocida y seguro que a más de uno nos a pasado más de una vez).
  • C:WINDOWSMicrosoft.NETFrameworkv3.0Windows Communication FoundationServiceModelReg -i

Tras la ejecución de este comando

En esta página, explica los pasos más en profundidad así como la reparación manual si fuera necesario.

 

Justo hoy, un añito más viejo, jejeje…
Gracias a tod@s por compartirlo conmigo
Juanlu

Fiddler 2 – Depurador y sniffer

Aunque muchos de vosotros ya conocéis posiblemente esta herramienta y a pesar de que lleva tiempo publicada, quiero hacerle mención para aquellos que no la conocen y decir que en más de una vez me ha sacado de un apuro, jeje…, en fin, es una de esas herramientas que debe formar parte del repositorio de cada desarrollador, ¡de mi colección ya forma parte!.  En otras ocasiones he comentado sobre herramientas similares (WSE 2.0 Tracing Utility y TCPTrace (Un Sniffer TCP)) a esta, pero esta, sin lugar a dudas las supera con creces, al menos esa es mi opinión.

Páginas html al completo, contenidos de ficheros “.js”, “.css”, imágenes, peticiones y respuestas SOAP, posibilidad de editar y realizar peticiones, multitud de vistas posibles para hacer más fácil su uso, estadísticas, filtros, por si fuera poco permite hasta breakpoints y,… yo que sé cuantas cosas más… ¡Una herramienta que lo tiene todo!  La verdad, merece la pena, si podéis, echarle un vistazillo, no os arrepentiréis.

Es gratuita y podéis encontrarla aquí:  http://www.fiddlertool.com/fiddler/

 

“Por un camino más sencillo y cercano”

Gracias
Juanlu

WCF – WcfServiceHost, WcfTestClient, SvcConfigEditor y SvcTraceViewer.

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:DevelopmentWCFSamplesWcfService1>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:DevelpmentWCFSamplesWcfService1> 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:DevelpmentWCFSamplesWcfService1> 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