2017-10-17 1 views
0

Ich habe gerade einen azurblauen Web-Job erstellt. Ich geplant es alle 1 Minute laufen:Azure Webjob ist immer "Running"

0 */1 * * * * 

Dies ist der Code

var host = new JobHost(); 
Console.WriteLine("Starting program..."); 
var unityContainer = new UnityContainer(); 
unityContainer.RegisterType<ProgramStarter, ProgramStarter>(); 
unityContainer.RegisterType<IOutgoingEmailRepository, OutgoingEmailRepository>(); 
unityContainer.RegisterType<IOutgoingEmailService, OutgoingEmailService>(); 
unityContainer.RegisterType<IDapperHelper, DapperHelper>(); 

//var game = unityContainer.Resolve<IOutgoingEmailRepository>(); 
var program = unityContainer.Resolve<ProgramStarter>(); 
program.Run().Wait(); 
Console.WriteLine("All done...."); 

host.RunAndBlock(); 

Das Problem ist, dass der Status nie auf "Erfolg" ändern. Mache ich etwas falsch? Die folgenden sind die App-Einstellungen, die ich verwende, sollte ich ändern? Ich habe auch bemerkt, dass es nur das erste Mal ausgeführt wird, ich glaube, es ist, weil es nie

enter image description here

+1

Wenn Sie 'host.RunAndBlock()' verwenden, wird sichergestellt, dass der Job nie beendet wird. Versuchen Sie, diese Zeile zu entfernen. – Thomas

+1

Hat es sich jemals geändert zu fehlgeschlagen (wegen Timeout)? – Nick

+1

Hallo, irgendwelche Updates jetzt? –

Antwort

2

endet könnten Sie überprüfen Sie Ihre webkjob Protokolle auf KUDU.

Wenn Sie den obigen Job in einem RunAndBlock Szenario verwenden, muss Ihr Job kontinuierlich sein. Das bedeutet, dass der Prozess die ganze Zeit läuft.

Offensichtlich verwenden Sie Trigger webjob hier, nicht Continuous. RunAndBlock Methode kann hier nicht verwendet werden.

WEBJOBS_IDLE_TIMEOUT - Zeit in Sekunden, nach der wir ein Lauf ausgelöst Prozess Job abbrechen, wenn es sich im Ruhe ist, hat keine CPU-Zeit oder Ausgang (nur ausgelöst Jobs).

Außerdem merke ich, dass Sie setzen WEBJOBS_IDLE_TIMEOUT-100000 .Es scheint, dass der Wert zu groß ist, so dass es Ihre webjob macht in Leerlauf hört nie für eine lange Zeit, wenn es.

Sie auch die Gnadenfrist eines Auftrags durch die Angabe es (in Sekunden) in der settings.job Datei, in der der Name der Einstellung stopping_wait_time wie so ist ändern könnte:

{ "stopping_wait_time": 60 } 

Weitere Details entnehmen Sie bitte dazu doc.

Ich hoffe, es hilft Ihnen.

+0

In der Tat gibt es nie ein Szenario, in dem Sie 'RunAndBlock' für einen nicht kontinuierlichen WebJob aufrufen sollten. Wahrscheinlich müssen Sie das WebJobs-SDK in Ihrem Szenario überhaupt nicht verwenden. Mach einfach deine Arbeit von Main und sei erledigt. Verwenden Sie keinen Host. –

+1

Ich markierte dies als eine Antwort, weil ich denke, dass dies ein Weg ist, um das Problem zu beheben. Tho, ich fand, dass das Problem mit einer Codezeile verbunden war (innerhalb des Programms .Run()): Console.ReadLine(). Ein dummer Fehler. Deshalb ist die App nie fertig geworden. – Flezcano