2011-05-19 26 views
6

¿Me pregunto si hay una forma de usar tareas programadas con SQL Azure? Se agradece toda ayuda.Tareas programadas con Sql Azure?

El punto es que quiero ejecutar una declaración simple de una sola línea todos los días y me gustaría evitar la configuración de un rol de trabajador.

+0

Iré a http://www.mygreatwindowsazureidea.com/ y votaré por esta función. – ryancrawcour

Respuesta

6

Hoy no existe un agente SQL equivalente para SQL Azure. Tendría que llamar a su declaración de línea única desde una tarea en segundo plano. Sin embargo, si ya tiene un rol de web, puede generar fácilmente un hilo para manejarlo en su rol web sin tener que crear un Rol de trabajador. Blogé sobre el concepto here. Para engendrar un hilo, puede hacerlo en el controlador de eventos OnStart() donde la instancia de Role aún no se ha agregado al equilibrador de carga, o en el método Run() (donde la instancia de Role se ha agregado a la carga) balancín). Por lo general, es una buena idea hacer la configuración en OnStart().

Una advertencia que puede no ser obvia, ya sea que ejecute esta llamada en su propia función de trabajador o en una cadena de fondo de una función web existente: si escala su Función a, por ejemplo, dos instancias, debe asegurarse de que la llamada diaria solo se produce desde una de las instancias (de lo contrario, podría terminar con duplicados o una operación posiblemente costosa que se realiza varias veces). Existen algunas técnicas que puede utilizar para evitar esto, como un bloqueo de fila de tabla o un arrendamiento de blob de Azure Storage. Con el primero, puede usar esa fila para almacenar la marca de tiempo de la última vez que se ejecutó la operación. Si adquiere el bloqueo, puede verificar si la operación se realizó dentro de un intervalo de tiempo determinado (¿quizás una hora?) Para decidir si alguna de las otras instancias ya lo ejecutó. Si no puede adquirir el bloqueo, puede asumir que otra instancia tiene el bloqueo y está ejecutando el comando. Hay otras técnicas, esta es solo una idea.

+0

Eso suena interesante. – BitKFu

+0

hmmm. pero solo tengo una función de servicio WCF en su lugar. ¿Puede el rol de servicio de WCF sobrecargarse también? – BitKFu

+1

El término "Rol" es sinónimo de "Plantilla de máquina virtual". Todas las funciones de Windows Azure equivalen a Windows Server 2008 SP2 o Windows Server 2008 R2. Y, al igual que un rol web y un rol de trabajador, el rol web de WCF tiene OnStart() y Run(). Puede ejecutar sus tareas en segundo plano en cualquiera de ellos. –

3

Además de la respuesta de David, si usted tiene una gran cantidad de tareas programadas para hacer, entonces puede ser vale la pena mirar:

(Usted podría utilizar quartz.net dentro del hilo que David menciona, pero lokad.cloud requeriría un cambio de arquitectura un poco más grande)

+0

+1 para los marcos de programación preconstruidos. La opción Lokad es parte de un conjunto de soluciones más grande para la construcción de aplicaciones de Windows Azure, y si todo lo que necesita es la programación, la solución quartz.net parece ser la mejor opción. –

2

Espero que sea aceptable hablar sobre su propia empresa. Tenemos un servicio basado en la web que le permite hacer esto. Puede hacer clic en este enlace para ver más detalles sobre cómo schedule execution of SQL Azure queries.

+1

¡He intentado esta solución, es genial! – ryancrawcour

2

Al superar el problema de los roles múltiples que ejecutan la misma tarea, puede verificar el ID de la instancia de rol y asegurarse de que solo la primera instancia ejecutará la tarea.

using Microsoft.WindowsAzure.ServiceRuntime; 

     String g = RoleEnvironment.CurrentRoleInstance.Id; 
     if (!g.EndsWith("0")) 
     { 
      return; 
     } 
Cuestiones relacionadas