Exportar (0) Imprimir
Expandir todo

Generar una aplicación que se ejecute en un servicio en la nube en Windows Azure

Actualizado: diciembre de 2013

Una aplicación diseñada para que sea un servicio en la nube en Windows Azure consta de varios recursos de cálculo que procesan información de forma colectiva e interactúan entre sí y el mundo externo. Un servicio en la nube en Windows Azure puede contener hasta cinco de las definiciones de roles siguientes:

  • Rol web: un componente del servicio que se personaliza para la programación de aplicaciones web tal como las admiten Internet Information Services (IIS) 7 y ASP.NET. El rol web está pensado para su utilización como elemento front-end en el servicio en la nube.

  • Rol de trabajo: componente del servicio que resulta útil para el desarrollo generalizado. Puede realizar un procesamiento en segundo plano de un rol web. Un rol de trabajo se utiliza normalmente en tareas de ejecución prolongada que no son interactivas, pero también puede hospedar cualquier tipo de carga de trabajo.

Puede utilizar la siguiente información para entender el uso de roles en una aplicación:

En Windows Azure, el rol web contiene los sitios web u otro código que admite Internet Information Services (IIS). Por lo general, se trata de una página ASPX o un servicio web, pero puede utilizar otras herramientas de desarrollo web como un preprocesador de hipertexto (PHP) para prestar suministro a los servicios. Un rol web ASP.NET en Windows Azure es similar a una aplicación web ASP.NET en que se genera con archivos .aspx y código fuente, pero incluye herramientas adicionales que permiten su ejecución en el entorno de Windows Azure. Para obtener más información acerca de los proyectos web de ASP.NET, vea Proyectos web de ASP.NET.

Un rol web también puede hospedar la mayoría de las otras aplicaciones que utilizan el protocolo HTTP, como un servicio WCF mediante el esquema basicHttpBinding. Para obtener más información, vea basicHttpBinding. Las herramientas de Windows Azure para Microsoft Visual Studio proporcionan plantillas que harán más sencilla la creación de aplicaciones que encajan en estos escenarios. Para descargar estas herramientas, vea Descargas de Windows Azure.

La diferencia principal entre un rol web y un rol de trabajo es la compatibilidad para IIS. El rol web se ha diseñado para que incorpore una interfaz a través de los sitios web hospedados y aplicaciones web de IIS. En cambio, el rol de trabajo es flexible y está abierto a cualquier posibilidad. La mayoría de los tipos de aplicaciones pueden hospedarse en un rol de trabajo, lo cual incluye aquellas que utilizan lenguajes que no son de .NET o que ejecutan código sin administrar.

Algunas de las diferencias son:

  • El rol web proporciona compatibilidad para mostrar un elemento front-end para el usuario a través de IIS. Aunque se puede escribir código para mostrar una interfaz de usuario mediante un rol de trabajo, el rol web hace que resulte más sencillo crear este tipo de aplicación.

  • En el rol web, IIS controla la eficacia del subproceso. En el rol de trabajo es usted quien debe controlar los problemas en los subprocesos.

  • Debe proporcionar un método de ejecución al que llamar para iniciar el procesamiento.

  • El perímetro de seguridad es diferente entre el rol web y el rol de trabajo. En el rol web, las listas de control de acceso (ACL) para los certificados se establecen para admitir IIS y servicios de red de forma predeterminada. Al utilizar un rol de trabajo debe establecer las ACL para que admitan los permisos que requiere la aplicación.

Los tipos de tareas para los que se utiliza normalmente un rol de trabajo son:

  • Tareas de ejecución prolongada que son asincrónicas y para las que el usuario no tiene que esperar.

  • Para hospedar servicios de aplicación que no requieren una interfaz de usuario.

  • Servicios en segundo plano que escuchan en una cola.

  • Ejecución de servicios basados en TCP.

  • Trabajos intensivos de cálculo.

En Windows Azure SDK, los roles web tienen acceso a toda la funcionalidad de IIS. Al crear una aplicación para Windows Azure, se configura para que utilice la capacidad íntegra de IIS. Para obtener más información acerca de los roles web e IIS, vea Configurar un servidor web para que suministre contenido (IIS 7.0).

Los roles web incluyen:

  • Compatibilidad para diversos sitios web y aplicaciones en una única instancia de rol web. Para obtener más información acerca de la configuración del rol web para que hospede a varios sitios, vea Configurar un rol web para varios sitios web.

  • Crear scripts de las tareas de inicio de configuración. Para obtener más información acerca de las tareas de inicio, vea Configurar los componentes de IIS en Windows Azure.

  • Ejecutar sitios web y aplicaciones directamente en IIS.

  • Utilizar dominios de aplicación de la forma habitual en IIS.

Puede administrar la forma en la que va a responder el rol cuando se inicie, ejecute o detenga en Windows Azure mediante el uso de la información siguiente:

La clase RoleEntryPoint incluye métodos a los que llama Windows Azure cuando inicia, ejecuta o detiene un rol web o de trabajo. Puede invalidar opcionalmente estos métodos para administrar la inicialización del rol, las secuencias de apagado del rol o el subproceso de ejecución del rol. Un rol de trabajo debe extender la clase RoleEntryPoint. Para los roles web, extender RoleEntryPoint es opcional.

Al extender RoleEntryPoint, debe tener en cuenta los siguientes comportamientos de los métodos:

  • Los métodos OnStart y OnStop devuelven un valor booleano, de modo que es posible devolver false desde estos métodos.

    Si el código devuelve false, el rol del proceso finaliza precipitadamente, sin ejecutar ninguna secuencia de cierre que pueda haber preparado. Por lo general, se recomienda evitar devolver false desde el método OnStart.

  • Cualquier excepción no detectada en una sobrecarga de un RoleEntryPoint se trata como una excepción no controlada.

    Si una excepción se produce en uno de los métodos del ciclo de vida, Windows Azure desencadenará el evento UnhandledException y, posteriormente, se detendrá el proceso. Después de dejar al rol sin conexión, Windows Azure lo reiniciará. Cuando se produce una excepción no controlada, el evento Stopping no se desencadena y no se llama al método OnStop.

Si no se inicia el rol o ha entrado en bucle entre los estados de inicializar, ocupado y detener, el código puede producir una excepción no controlada en uno de los eventos del ciclo de vida cada vez que el rol se reinicia. En este caso, utilice el evento UnhandledException para determinar la causa de la excepción y para administrarla correctamente. El rol también se puede devolver desde el método Run, que hace que el rol se reinicie. Para obtener más información acerca de los estados de implementación, vea Problemas comunes que causan el reciclaje de los roles.

noteNota
Si utiliza Windows Azure Tools for Microsoft Visual Studio para desarrollar la aplicación, las plantillas de proyecto del rol automáticamente extienden la clase RoleEntryPoint en los archivos WebRole.cs y WorkerRole.cs.

Se puede influenciar el ciclo de vida de un rol con los siguientes métodos de la clase RoleEntryPoint:

Se llama al método OnStart cuando Windows Azure pone en línea a la instancia de rol. Mientras el código de OnStart se esté ejecutando, la instancia de rol estará marcada con el estado de ocupado y el equilibrador de carga no le enviará tráfico externo. Puede invalidar este método para llevar a cabo la tarea de inicialización, como implementar controladores de eventos e iniciar Diagnósticos de Windows Azure. Para obtener más información sobre el diagnóstico, vea Recopilar datos de registro mediante Diagnósticos de Windows Azure.

Si OnStart devuelve true, indica que la instancia se inicializó correctamente y Windows Azure llama al método RoleEntryPoint.Run. Si OnStart devuelve false, el rol termina inmediatamente, sin ejecutar ninguna secuencia de cierre prevista.

En el ejemplo de código siguiente se muestra cómo invalidar el método OnStart. Este método configura e inicia el monitor de diagnóstico cuando la instancia de rol se inicia y establece una transferencia de datos de registro hacia una cuenta de almacenamiento:


public override bool OnStart()
{
    var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

    config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Error;
    config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);

    DiagnosticMonitor.Start("DiagnosticsConnectionString", config);

    return base.OnStart();
}

El método OnStop se llama después de que Windows Azure haya dejado sin conexión a una instancia de rol. Puede invalidar este método para llamar al código necesario para la instancia de rol para que se cierre sin problemas.

ImportantImportante
El código que se ejecuta en el método OnStop dispone de tiempo limitado para finalizar cuando se llama por otros motivos que no son un cierre iniciado por un usuario. Una vez se haya agotado este tiempo, el proceso finaliza y deberá asegurarse de que el código en el método OnStop puede ejecutarse rápidamente o de que no tolera ejecuciones para la finalización. Se llama al método OnStop después de que se desencadena el evento Stopping.

Puede invalidar el método Run para implementar un subproceso de ejecución prolongada para la instancia de rol.

No es necesario invalidar el método Run; la implementación predeterminada inicia un subproceso que se mantiene en espera indefinidamente. Si invalida el método Run, el código debe bloquearse indefinidamente. Si se devuelve el método Run, el rol se recicla automáticamente sin problemas; es decir, Windows Azure desencadena el evento Stopping y llama al método OnStop de forma que las secuencias de cierre se puedan ejecutar antes de que el rol se quede sin conexión.

Puede utilizar los métodos del ciclo de vida de ASP.NET, además de aquellos que proporciona la clase RoleEntryPoint, para administrar las secuencias de inicialización y cierre para un rol web. Esto puede resultar útil para procesos de compatibilidad si va a trasladar una aplicación ASP.NET existente a Windows Azure. Los métodos del ciclo de vida de ASP.NET se llaman desde los métodos RoleEntryPoint. Se llama al método Application_Start después de que finalice el método RoleEntryPoint.OnStart. Se llama al método Application_End antes de llamar al método RoleEntryPoint.OnStop.

Uno de los patrones de aplicación más comunes de Windows Azure es para que un rol web reciba solicitudes entrantes y después utilice las colas de Windows Azure para pasarlas a las instancias de un rol de trabajo con el fin de que se procesen. El rol de trabajo busca periódicamente en la cola mensajes para ver si hay trabajos a realizar. En caso de que los haya, lleva a cabo la tarea. El rol web normalmente recupera el trabajo completado del almacenamiento persistente, como un blob o una tabla. El siguiente diagrama muestra este patrón típico de diseño.

Los roles se comunican a través de las colas

Para obtener más información sobre el uso de los servicios de almacenamiento, vea Almacenamiento.

Vea también

Mostrar:
© 2014 Microsoft