Windows Azure Startups

Una de las cosas que m谩s me gustan de la plataforma Windows Azure es que nuestras soluciones se convierten en un paquete capaz de acondicionar su entorno de vida 馃檪 Todos aquellos pasos previos, como la instalaci贸n de librer铆as, configuraci贸n de puertos en el firewall, etc茅tera, podemos definirlos gracias a la secci贸n Startup del archivo ServiceDefinition.csdef.

Esta secci贸n nos permite ejecutar cualquier tipo de acci贸n desatendida que sea necesaria para cada una de las instancias de nuestro rol. Para verlo con un ejemplo, voy a mostrar c贸mo ser铆a posible la instalaci贸n de las librer铆as de ASP.NET MVC 3, ya que, a d铆a de hoy,聽estas no est谩n disponibles por defecto en las im谩genes que utilizan las instancias de Windows Azure.

En primer lugar, creamos un projecto de tipo cloud sin seleccionar ning煤n rol. Para poder a帽adir un proyecto del tipo ASP.NET MVC 3, seleccionamos con el bot贸n derecho sobre la soluci贸n y hacemos clic sobre Add -> New Project…

por 煤ltimo seleccionamos la plantilla ASP.NET MVC聽3 Web Application (En mi caso la plantilla que he utilizado fue Internet Application) y esperamos a que la misma se genere.

Si llegados a este punto pulsamos F5 para ejecutar la aplicaci贸n, Visual Studio nos informar谩 del siguiente error:

El motivo es que, si bien hemos a帽adido una aplicaci贸n web a nuestro proyecto, la misma no est谩 asociada con el proyecto cloud. Para ello, nos posicionamos en la carpeta Roles y, haciendo clic con el bot贸n derecho sobre ella, seleccionamos Add -> Web Role Project in solution…

Pulsamos F5 para comprobar que en local todo funciona correctamente 馃檪

Una vez que tenemos nuestro proyecto listo, descargamos el ejecutable para la instalaci贸n聽llamado AspNetMVC3ToolsUpdateSetup.exe desde el siguiente enlace.

Este archivo debemos incluirlo dentro del proyecto y modificar las propiedades del mismo para que sea copiado en el paquete que posteriormente subiremos a la nube.

隆Perfecto! Ya tenemos nuestra soluci贸n con una aplicaci贸n ASP.NET MVC 3 y el ejecutable que instalar谩 las librer铆as necesarias para que el sitio web funcione en Windows Azure. Como 煤ltimo paso, debemos definir el apartado Startup y definir una tarea donde indiquemos que es necesario instalar ASP.NET MVC 3 antes de que la aplicaci贸n est茅 disponible para los usuarios. Para ello, abrimos el archivo ServiceDefinition.csdef donde a帽adimos la secci贸n Startup con los siguientes valores:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Startups" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="MyASPNETMVC3">
<Startup >
<Task commandLine ="installaspnetmvc3.cmd" executionContext="elevated" taskType="simple"></Task>
</Startup>
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
</WebRole>
</ServiceDefinition>

Dentro del apartado Startup podemos tener tantas tareas como sean necesarias con los siguiente par谩metros:

  • commandLine: Recibe como valor el nombre del programa o script que queremos ejecutar. En este caso vamos a invocar a un archivo llamado installaspnetmvc3.cmd, el cual situaremos en la raiz del proyecto web.

    En 茅l vamos a incluir la llamada al archivo AspNetMVC3ToolsUpdateSetup.exe con la opci贸n /q para indicar que debe ser una instalaci贸n 芦silenciosa禄 o desatendida 馃槈

    E:approotfilesAspNetMVC3ToolsUpdateSetup.exe /q
  • Nota: Existe un problema a la hora de generar scripts desde Visual Studio, el cual a帽ade un byte para marcar todos los ficheros por defecto. Para evitar incidentes, recomiendo crear estos archivos con Notepad o modificar las opciones de guardado en File -> Advanced Save Options… donde deberemos seleccionar Unicode (UTF-8 without signature) – Codepage 650001 encoding.

  • executionContext: Nos permite indicar el nivel de permisos que queremos que tenga la tarea (limited o elevated)
  • taskType: Dependiendo de la implicaci贸n que tenga nuestra tarea en relaci贸n con el rol, podemos elegir entre:
    • simple: Se trata del tipo de tarea s铆ncrona, la cual paraliza cualquier proceso hasta que la misma termina. Si no especificamos ning煤n tipo, esta es la opci贸n por defecto.
    • background: Nuestra tarea se ejecutar谩 a la par que otras (la ejecuci贸n de nuestro rol por ejemplo).
    • foreground: A diferencia del tipo anterior, cuando especificamos una tarea foreground聽esta se ejecutar谩 de manera as铆ncrona como la anterior. La peculiaridad consiste en que el rol no podr谩 detenerse hasta que dicha tarea haya finalizado.

Si desplegamos nuestra aplicaci贸n en Windows Azure, podremos disfrutar de ASP.NET MVC 3 gracias a聽Startup section 馃榾

Espero que haya sido de utilidad 馃檪

隆Saludos!