Compartir a través de


Personalizar el ciclo de vida de un rol web o de trabajo en .NET

Importante

Cloud Services (clásico) ahora está en desuso para todos los clientes a partir del 1 de septiembre de 2024. Microsoft detendrá y cerrará todas las implementaciones en curso y los datos se perderán de forma permanente a partir de octubre de 2024. Las nuevas implementaciones deben utilizar el nuevo modelo de implementación basado en Azure Resource Manager Azure Cloud Services (soporte extendido) .

Cuando creas un rol de trabajo, extiendes la clase RoleEntryPoint, que proporciona métodos para anular que te permiten responder a eventos del ciclo de vida. Para los roles web, esta clase es opcional; sin embargo, debe usarla para responder a eventos del ciclo de vida.

Extender la clase RoleEntryPoint

La clase RoleEntryPoint incluye métodos a los que llama Azure cuando se inicia, se ejecuta o se detiene un rol web o de trabajo. Opcionalmente, puede sobrescribir estos métodos para administrar la inicialización del rol, las secuencias de apagado del rol o el subproceso de ejecución del rol.

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

  • El método OnStart devuelve un valor booleano, por lo que es posible devolver false desde este método.

    Si el código devuelve false, el proceso del rol finaliza precipitadamente, sin ejecutar ninguna secuencia de apagado que pueda tener implantada. En general, deberían evitar devolver false desde el método OnStart.

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

    Si se produce una excepción dentro de uno de los métodos del ciclo de vida, Azure genera el evento UnhandledException y luego finaliza el proceso. Después de que la función se ponga fuera de línea, Azure la reinicia. Cuando se inicia una excepción no controlada, no se genera el evento Stopping y no se llama al método OnStop.

Si el rol no se inicia, o se recicla entre los estados de inicialización, en curso y deteniéndose, el código puede estar lanzando una excepción no controlada en uno de los eventos del ciclo de vida cada vez que el rol se reinicie. En este caso, use el evento UnhandledException para determinar la causa de la excepción y controlarla de manera adecuada. Puede que su rol también se pueda devolver desde el método Ejecutar , que hace que se reinicie el rol. Para obtener más información acerca de los estados de implementación, vea Problemas comunes que hacen que se reciclen los roles.

Nota:

Si está utilizando las Herramientas de Azure para Microsoft Visual Studio para desarrollar su aplicación, las plantillas de proyectos de rol extienden automáticamente la clase RoleEntryPoint en los archivos WebRole.cs y WorkerRole.cs.

Método OnStart

Se llama al método OnStart cuando Azure pone en línea la instancia de rol. Mientras se ejecuta el código OnStart, la instancia de rol se marca como ocupada y el equilibrador de carga no le dirige ningún tráfico externo. Puede sobrescribir este método para realizar trabajo de inicialización, como la implementación de controladores de eventos y el inicio de Diagnósticos de Azure.

Si OnStart devuelve true, la instancia se inicializa correctamente y Azure llama al método RoleEntryPoint.Run. Si OnStart devuelve false, el rol finaliza de inmediato, sin ejecutar ninguna secuencia de apagado planeado.

En el ejemplo de código siguiente se muestra cómo invalidar el método OnStart . Este método configura e inicia un monitor de diagnóstico cuando se inicia la instancia de rol y se configura una transferencia de datos de registro a 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 true;
}

Método OnStop

El método OnStop se llama después de que Azure desconecte una instancia de rol y antes de que el proceso salga. Puede invalidar este método para llamar al código necesario para que la instancia de rol se apague de manera ordenada.

Importante

El código que se ejecuta en el método OnStop tiene un tiempo limitado para finalizar cuando se llama por motivos distintos del apagado iniciado por un usuario. Después de que transcurra este tiempo, el proceso finaliza, por lo que debe asegurarse de que el código del método OnStop pueda ejecutarse rápidamente o tolere no completarse. Al método OnStop se invoca después de que se genere el evento Parada.

Método de ejecución

Puede sobrescribir el método Run para implementar un subproceso de larga ejecución para su instancia de rol.

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

Implementación de los métodos del ciclo de vida de ASP.NET para un rol web

Puede usar los métodos del ciclo de vida de ASP.NET, además de los proporcionados por la clase RoleEntryPoint, para administrar las secuencias de inicialización y apagado de un rol web. Este enfoque puede ser útil para fines de compatibilidad si va a portar una aplicación de ASP.NET existente a Azure. Los métodos de 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.

Pasos siguientes

Aprenda cómo crear un paquete de servicio en la nube.