Iniciar una tarea al arrancar el WebSite en Windows Azure


Normalmente en un entorno de WebRoles con múltiples instancias, puede ser que queramos lanzar una tarea al arrancar el site. Típicamente la tarea se lanzaría en el evento Application_Start del global.asax. El problema es que en Azure nos lanzaría la tarea tantas veces como instancias tuviesemos. El siguiente código permite que solo se lance la tarea para la primera instancia del WebRole.

		protected virtual void Application_Start()
        {
            if (MustRunWorkerTask())
            {
				DoWork(); 	//Tarea a Realizar
			}
		}

       private bool MustRunWorkerTask()
        {
            bool lbOnlyWorkerTask = true;
            if (RoleEnvironment.IsAvailable)
            {
                lbOnlyWorkerTask = false;
                String roleName = RoleEnvironment.CurrentRoleInstance.Role.Name;
                var roleInstances = RoleEnvironment.Roles[roleName].Instances.OrderBy(r => r.Id);
                String firstRolId = roleInstances.First().Id;
                if (RoleEnvironment.CurrentRoleInstance.Id == firstRolId) lbOnlyWorkerTask = true;
            }
            return lbOnlyWorkerTask;
        }
		

Nota:

Os podeis encontrar el problema de que el RoleEnvironment.Roles[roleName].Instances nos retorne tan solo una instancia (la propia). Para que nos retorne el numero de instancias correctas; es necesario definir un internal endpoint para obtener el número correcto de instancias (http://msdn.microsoft.com/en-us/library/gg432980.aspx).

Anuncios
Esta entrada fue publicada en Azure, Desarrollo y etiquetada , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s