viernes, 21 de diciembre de 2007

Habilitar WCF al Visual Studio 2005 en Windows XP

WCF es una de las 4 tecnologías que salieron junto con el Framework 3.0 (3.5) pensando ya en lo que sería Visual Studio 2008. El propósito de esta tecnología es el poder crear un servicio para que pueda ser consumido por otras aplicaciones, sin importar el tipo de tecnología, medio o canal de comunicación que vayamos a utilizar. Así, como desarrolladores nos enfocamos sólo en lo que deseamos compartir con otras aplicaciones, y no en el cómo.

Para empezar a desarrollar con WCF teniendo instalado Windows XP (es decir también el IIS 5.1) como sistema operativo y Visual Studio 2005 en una máquina , se requiere realizar los siguientes pasos:

1. Bajar e instalar el Framework 3.0, ahora ya se baja automáticamente dentro del proceso de Windows Update.

2. Bajar el componente, o las extensiones para WCF y WPF (peso 3.6 MB). (Bajar Aqui)

3. Instalar el paquete vsextwfx.msi que nos acabamos de bajar.

4. Listo, ya podemos entonces usar WCFo WPF y crear un proyecto de este tipo desde VS 2005:



En próximas entradas de este blog, se realizará ejemplos de cómo crear un servicio utilizando WCF desde VS 2005 con Win XP (IIS 5.1). Este sólo hablará de como configurar WCF para que funcione correctamente en una máquina con estas características.

Existen 3 formas de hostear un servicio creado en WCF

- Auto -Hosteado: una aplicación manejada ej: App. Windows, App. de Consola. puede soportar ser el host de un servicio WCF. Este tipo de hosting suele utilizarse en la etapa de desarrollo y pruebas, para testear el servicio WCF creado.
- IIS (con el Internet Information Services): Hostea un servicio WCF como si fuera un servicio Web, con la diferencia que al archivo que se hará referencia en la URL termina en .svc, mientras que en el servicio Web creado con .NET es .asmx. Usa el protocolo HTTP necesariamente si nuestro IIS es de la versión 5.1 o 6.0 para la comunicación.
- Windows Process Activation Service (WAS): Parecido al IIS con la diferencia que soporta otros protocolos de comunicación a más de HTTP: Namepipes, TCP, etc. (Además de muchas otras características)

Con nuestro ambiente (Winxp + VS 2005 + Fr 3.0) sólo podemos trabajar con los dos primeros tipos de hosting. Sin embargo con el segundo (IIS), solemos tener problemas, puesto que ya creamos nuestro servicio WCF y lo exponemos mediante IIS pero al momento de llamar al servicio este no funciona, para probar lo llamamos desde el Internet Explorer y el resultado es el siguiente:

Mustra el .svc como si fuera un simple archivo de texto expuesto desde IIS. Si esto ocurre, para que funcione este servicio necesitaremos correr un utilitario que viene con el Framework 3.0: ServiceModelReg.exe que sirve para instalar ciertas extenciones y metadata en el IIS, este aplicativo se encuentra normalmente en:
C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation

y desde línea de comando escribiremos lo siguiente: ServiceModelReg.exe -i (Mas Información de ServiceModelReg.exe).
Luego de esto, nuestro IIS ya debería ser capaz de hostear los .svc. Sin embargo, ciertas ocasiones el IIS tiene cierta Metadata y extensiones corruptas debido a la propia instalación del fr 3.0 o de las mismas extensiones WCF, por lo que nos puede continuar sucediendo el mismo problema.

Para limipiar y reestablecer nuestro IIS, deberemos correr un último utilitario que se lo puede descargar desde la siguiente página: CleanIISScriptMaps.
Se corre este utilitario, luego volvemos a correr el ServiceModelReg.exe y ahora si nuestro servicio WCF estará bien hosteado y funcionando. Para probar, nuevamente se lo llama por el Browser y el resultado es el siguiente:


Listo, ahora si nuestro WCF se encuentra bien configurado y listo para usarse!!

viernes, 14 de diciembre de 2007

Orientación en la impresión con Reporting Services

Este es un problema que les sucedió a un par de conocidos y que realmente es de fácil solución. Resulta que ellos tenían creados algunos reportes con la herramienta de Reporting Services, los reportes funcionan, se paginan, se exportan, etc. Todo estaba bien, solo tenían un problemita en el momento de la impresión: por cuestiones del negocio y su necesidad requerían que sus reportes por defecto se impriman de manera horizontal. Aca les va un ejemplo:

Supongamos que tengo un reporte como el siguiente















Este reporte, por defecto se verá así, si hacemos clic en la vista previa (para saber como se va a imprimir )















o si hacemos clic en la configuración de la página


Como se puede notar, por defecto la pagina es configurada para imprimirse verticalmente. Claro manualmente se puede modificar para configurar la orientación a la página de manera Horizontal:




Pero para ciertas empresas se puede perder mucho tiempo al realizar este trabajo, o simplemente por estetica siempre el reporte tendría que estar configurado para imprimirse de manera horizontal. Por lo que por defecto necesitan que la hoja de reporting services este seteada para la impresión de manera horizontal.

OJO: (Alguna ocasión alguien intento que este trabajo lo haga el objeto que consume un reporte de reporting services en .NET: el Report Viewer, sin embargo este objeto no puede realizar este menester. Si, tiene una propiedad para ver la orientación de la impresión del reporte en código (landscape), pero es de solo LECTURA)

Por lo tanto debemos configurar esto desde el reporting services. En reporting services NO existe una propiedad que setee el reporte de manera horizontal o vertical, por lo que tenemos que modificar lo siguiente: el ancho de página y el alto de página.

Si sabemos que por defecto las impresiones se realizan en formato A4, entonces conocemos que el reporte tendrá el siguiente tamaño:

Ancho de página: 21cm, Alto de página: 29,7cm.

Por lo tanto reemplazaremos estos valores, para que el reporte se vea de manera horizontal por defecto, a los siguientes:

Ancho de página: 29,7cm, Alto de página: 21cm.

Entonces desde mi report project, en el menú superior voy a Report -> Report Properties->la pestaña Layout y modifico estos valores.

Con este pequeño cambio, tenemos configurado ahora nuestro reporte para que se imprima por defecto de manera horizontal!!!.....

PD: Ciertas personas han tenido problemas con este cambio, pues en el momento de probar el reporte, este funciona de correcta manera cuando se lo corre desde visual studio (cuando se lo compila para prueba), pero cuando se lo sube ya al report server se sigue teniendo el mismo problema anterior.

Esto sucede por ciertos elementos de configuración de la máquina, lenguaje, unidades de medida, etc. En estos casos lo recomendable es pasar los valores que seteamos de nuestro reporte en cm a pulgadas (inches), es decir:

Ancho de página: 11,69in, Alto de página: 8,27in.

Les aseguro que este cambió funcionará en todos los reports servers!!