2015-12-21 12 views
5

Dies ist das erste Mal, dass ich einen WebJob-Anwendungstyp ausgeführt habe. Ich habe ein Webjob-Projekt erstellt und in der Lösung kommt es mit Program.cs und Function.cs.Azure WebJob Beste Vorgehensweise

Ich habe bereits Function.cs entfernt, weil in diesem Projekt gibt es keine Warteschlange ich werde Daten von erhalten. Jetzt

in Program.cs gibt es bereits Haupt Methode wie folgt zusammen:

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(); 
    } 
} 

Wie ich verstehe, dass RunAndBlock ist die webjob kontinuierlich zu laufen, aber ich will den Job nur einmal ausgeführt werden. Ich möchte die Ausführung von außen nach einem Zeitplan kontrollieren. Ich würde gerne wissen, wie ich meinen Code nur einmal ausführen lassen kann? Wie unten zu sehen, habe ich eine SupportService Klasse, die RunOnePoolProvisioingCycle hat, möchte ich diese Methode nur einmal aufrufen. Ist das der richtige Ansatz?

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

oder dieser?

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

oder dieser?

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

oder sollte ich verwenden:

host.Start() 

oder

host.StartAsync()? 
+0

Ich glaube, dass alle Antworten hier korrekt sind, wie meine Frage über Annäherung ist. aber ich muss einen auswählen. Diese Notiz für jeden, der diesen Beitrag sieht. –

Antwort

4

Was Sie sehen, ein Teil des SDK ist, die optional ist. Ein Webjob kann so einfach wie eine Konsole sein, die Sie zippen, hochladen und ausführen.

So scheint dieser Code die beste Option in Ihrem Fall:

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

also wird es der erste Code sein, der den Support direkt aufruft. aber ich habe das SDK in MSDN gelesen, und ich konnte wirklich nichts davon verstehen. empfehlen Sie eine Dokumentation für die JobHost Klasse und Eigenschaften und Funktionen. und wann sollte ich jeden von ihnen benutzen, und was ist die beste Praxis von jedem? –

+0

Ja, ich würde den ersten Code verwenden, den Sie vorschlagen. Das SDK leistet hervorragende Arbeit, indem es Azure-Speicher als eine Reihe von Triggern und Streams verfügbar macht. In diesem Fall hat der Host die Rolle der "Endlosschleife". – benjguin

1

Die WebJob durch die Vorlage erstellt wurde, verwendet die WebJobs SDK. Wenn Sie keine der Funktionen des SDK verwenden müssen, können Sie einfach eine Konsolenanwendung erstellen und einen CRON-Zeitplan einrichten, um ihn auszuführen (siehe "Geplante Jobs" here).

Ich verlinkte mit mehr Informationen über das WebJobs SDK oben. Neben der Vereinfachung von Szenarien, in denen Sie Funktionen in Warteschlangen/Blobs/etc. Auslösen möchten, können Sie Ihre Jobs auch termingerecht über TimerTrigger (Teil der SDK extensions) ausführen. Geben Sie diesen Materialien eine Lektüre, um zu sehen, welche Ihren Bedürfnissen am besten entspricht.

Verwandte Themen