Crystal Reports en Windows Azure

Desde que Microsoft llegó a un acuerdo con Crystal Reports para integrar su runtime y sus controles dentro de Visual Studio, muchos programadores lo han venido utilizando para visualizar informes dentro de sus aplicaciones .NET. Poco tiempo después Microsoft lanzó SQL Server Reporting Services que se ha convertido en el motor de informes más empleado en las nuevas aplicaciones .NET. Aún así lo cierto es que todavía hay una base importante de aplicaciones que emplean Crystal Reports y que se encuentran ahora en el proceso de migración a la Plataforma Windows Azure. Con algunas empresas con las que he hablado, la migración a la nube supone la “excusa” perfecta para migrar sus informes a SQL Azure Reporting pero en ocasiones es necesario abordar esta migración en 2 fases, migrando primero la aplicación a Azure “tal cual” y luego, en una segunda fase, ir migrando los informes a SQL Azure Reporting pero ya con la aplicación funcionando en Windows Azure. Como no he visto mucha información al respecto, quería escribir este post los pasos necesarios para poder ejecutar aplicaciones con Crystal Reports en instancias de Windows Azure.

Instalar Crystal Reports en un Web Role

Los pasos necesarios son los siguientes:

1.- Descargarse el MSI con el instalador del runtime de Crystal Reports para .NET 4.0 (64 bits) desde este enlace.

2.- Incluir el archivo MSI como un fichero dentro de la carpeta raíz del proyecto en Visual Studio asegurándose de que la propiedad “Build Action” está en “None” y la propiedad “Copy to Output Directory” a “Copy always”. De esta forma nos aseguramos de que nuestro paquete de despliegue en Azure (*.cspkg) contiene el instalador de Crystal Reports.

3.- Programar un script para que el runtime de Crystal Reports se instale de forma desatendida cuando se inicie la instancia del Web Role. Esto nos asegurará que siempre tengamos disponible Crystal Reports durante el ciclo de vida de nuestra aplicación.

Para ello, utilizaré las Startup Tasks de forma similar a lo visto en el post sobre cómo instalar Servicios Windows.

En nuestro caso, voy a crear un archivo llamado installcrystal.cmd que tendrá estas 2 líneas:

echo off

msiexec.exe /I "CRRuntime_64bit_13_0.msi" /qn

Por último, tengo que añadir la tarea de arranque en el ServiceDefinition.csdef. Para ello añadiremos las etiquetas de <Startup> que deberán estar dentro de las etiquetas de <WebRole>. Quedará algo similar a lo siguiente:

<WebRole name="Test">

………………

…………

<Startup>

<Task commandLine="installcrystal.cmd" executionContext="elevated" />

</Startup>

</WebRole>

El caso de los 32 bits

Si por algún motivo tenemos componentes de terceros que sólo funcionan en 32 bits, entonces sería necesario instalar la versión de Crystal Reports de 32 bits (hay otro MSI para ello). En ese caso, es importante reseñar que además será necesario incluir una tarea de arranque adicional para forzar el IIS a modo 32 bits como se muestra a continuación.

activarIIS32bit.cmd:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

Y en el fichero de configuración quedaría:

<Startup>

<Task commandLine="activarIIS32bit.cmd" executionContext="elevated" taskType="simple" />

<Task commandLine="installcrystal.cmd" executionContext="elevated" />

</Startup>

ACTUALIZACIÓN (21-6-2011): Si queremos instalar la versión completa de Crystal Reports, la 2008, tendremos que utilizar la instalación de 32 bits ya que en este momento SAP no dispone de versión de 64 bits para esta versión. En este caso además, no es suficiente con lanzar el instalador como se ha visto en este artículo ya que con este procedimiento el programa se instala con privilegios elevados pero bajo la cuenta “LocalSystem” y el instalador de Crystal requiere ser ejecutado desde una cuenta de usuario local, no de sistema. Esto es posible hacerlo también en Windows Azure y la solución la encontraréis en estos posts de David Aiken.

Cómo conectar los informes con SQL Azure

Además de conseguir tener el runtime de Crystal ejecutándose en una instancia de Windows Azure, tendremos que adaptar la conexión de los informes y el SQL Azure. En la web de SAP podéis ver este artículo que explica el proceso en detalle.

Como siempre, espero que sea útil.

Install Crystal Reports in Windows Azure