2015-12-21 15 views
5

Questa è la prima volta che eseguo un tipo di applicazione WebJob. Ho creato un progetto webjob e nella soluzione viene fornito con Program.cs e Function.cs.Azure WebJob Best Approach

Ho già rimosso Function.cs perché in questo progetto non ci sarà alcuna coda da cui riceverò i dati.

Ora in Program.cs c'è già Metodo principale come la seguente:

class Program 
{ 
    // Please set the following connection strings in app.config for this WebJob to run: 
    // AzureWebJobsDashboard and AzureWebJobsStorage 
    static void Main() 
    { 
     var host = new JobHost(); 
     // The following code ensures that the WebJob will be running continuously 
     host.RunAndBlock(); 
    } 
} 

quanto ho capito, che RunAndBlock è quello di eseguire il webjob continuamente, ma voglio eseguire il processo una sola volta. Voglio controllare l'esecuzione dall'esterno con un programma. Mi piacerebbe sapere come far funzionare il mio codice solo una volta? Come visto di seguito, ho una classe SupportService che ha RunOnePoolProvisioingCycle, voglio chiamare questo metodo una sola volta. È questo l'approccio giusto?

static void Main() 
{ 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    _supportService.RunOnePoolProvisioningCycle(); 
} 

o questo?

static void Main() 
{ 
    var host = new JobHost(); 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    host.Call(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations")); 
} 

o questo?

static void Main() 
{ 
    var host = new JobHost(); 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    host.CallAsync(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations")); 
} 

o devo usare:

host.Start() 

o

host.StartAsync()? 
+0

Credo che tutte le risposte qui siano corrette, poiché la mia domanda riguarda l'approccio. ma devo sceglierne uno. questa nota per chiunque stia vedendo questo post. –

risposta

4

Quello che si vede è parte del SDK, che è opzionale. Un webjob può essere semplice come una console Applicazione che puoi comprimere, caricare ed eseguire così com'è.

Quindi questo codice sembra l'opzione migliore nel vostro caso:

static void Main() 
{ 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    _supportService.RunOnePoolProvisioningCycle(); 
} 
+0

quindi sarà il primo codice, che chiama direttamente il servizio di supporto. ma ho letto l'SDK fornito in MSDN, e davvero non ho potuto capire nulla da esso. si consiglia qualsiasi documentazione per la classe JobHost e proprietà e funzioni. e quando dovrei usare ognuno di loro e qual è la migliore pratica di ciascuno? –

+0

Sì, userei il primo codice che proponi. L'SDK fa un ottimo lavoro nell'esporre lo spazio di archiviazione di Azure come un insieme di trigger e flussi; in tal caso, l'host ha il ruolo del "ciclo infinito". – benjguin

1

Il WebJob creato dal modello utilizza il WebJobs SDK. Se non è necessario utilizzare alcuna delle funzionalità dell'SDK, è sufficiente creare un'app console e impostare una pianificazione CRON per eseguirla (consultare "Lavori pianificati" here).

Mi sono collegato a ulteriori informazioni sull'SDK di WebJob in alto. Oltre a facilitare gli scenari in cui si desidera attivare le funzioni su code/BLOB/ecc., Ha anche la possibilità di eseguire i lavori nei tempi previsti tramite TimerTrigger (parte dello SDK extensions). Dai una lettura a quei materiali per vedere quale si adatta alle tue esigenze al meglio.

Problemi correlati