2015-03-31 16 views
5

È possibile impostare pianificazioni separate per le singole funzioni non attivate in un webjob di Azure? Lo chiedo perché ho una mezza dozzina di compiti individuali che vorrei eseguire in momenti diversi della giornata e a intervalli diversi e non voglio creare un progetto separato per ciascuno.Pianificazioni separate per le funzioni di webjob di Azure?

+0

Siamo spiacenti. Non capisco Vuoi un webjob in esecuzione continua con diversi lavori secondari all'interno? Ogni sub-lavoro con un programma diverso? –

+0

Un webjob può esporre varie funzioni. Nel mio caso, voglio che tutti questi siano programmati, non attivati. Come tale ho più funzioni decorate con l'attributo NoAutomaticTrigger e vorrei attivare ognuna di queste in un programma diverso. –

+0

In una situazione come la tua ho utilizzato un'applicazione di console in esecuzione continua con una gestione interna e personalizzata delle attività programmate. –

risposta

7

Sì, è possibile utilizzare il TimerTriggerAttribute

Ecco un esempio di codice:

public class Program 
{ 
    static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 

     // Add Triggers for Timer Trigger. 
     config.UseFiles(filesConfig); 
     config.UseTimers(); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

    // Function triggered by a timespan schedule every 15 sec. 
    public static void TimerJob([TimerTrigger("00:00:15")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("1st scheduled job fired!"); 
    } 

    // Function triggered by a timespan schedule every minute. 
    public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, 
           TextWriter log) 
    { 
     log.WriteLine("2nd scheduled job fired!"); 
    } 
} 

È inoltre possibile utilizzare un'espressione cron per specificare quando per attivare la funzione:

Continuous WebJob with timer trigger and CRON expression

+0

Questo ha un problema di dipendenze con Azure.Storage maggiore di 5.0.2 e non verrà installato. Sto usando l'ultimo Storage 6.2.0 e ho bisogno di una soluzione alternativa. –

+0

Ma l'intero SDK di Webjob ha una dipendenza con Azure.Storage <= 5.0.2 – Thomas

+0

Corretto, e ho finito per utilizzare la versione prerelease di Azug App Service nuget su https://www.myget.org/F/azure-appservice /api/v3/index.json TimerJob è così facile da usare che ho dovuto. :) –

0

È possibile scrivere una semplice app per console con un ciclo infinito che si interrompe alla fine di ogni iterazione con Thread.Sleep(). Ogni volta che si riavvia il loop, controlla un programma che mantiene internamente e chiama tutte le funzioni che dovrebbero essere eseguite in quel momento. La pianificazione può essere archiviata in app.config in modo da poterla modificare senza ricompilare il WebJob, basta caricare una nuova app.config e riavviarla.

Oppure, se si preferisce, è possibile omettere il ciclo infinito e pianificare il WebJob a intervalli fissi, ad esempio ogni 30 minuti, e fare controllare il suo programma interno ogni volta che viene eseguito.

0

Ho finito per utilizzare Quartz.net con un lavoro continuo per la pianificazione di varie attività interne al lavoro web. Questo ha funzionato molto bene.