2016-07-20 21 views
2

Ich kann Singleton Lock Problem nicht erhalten, wenn ich die Anwendung lokal ausführe. Wie kann ich es lösen?Wie kann das Problem gelöst werden, dass das Singleton-Sperrproblem in Azure WebJob nicht behoben werden kann?

Unten ist mein Code

static void Main() 
    { 
     JobHostConfiguration config = new`enter code here` JobHostConfiguration(); 
     config.UseTimers(); 
     AutoMapperManager.SetAutomapper(); 
     JobHost host = new JobHost(config); 

     //Task.Factory.StartNew(() => host.Call(typeof(Functions).GetMethod("GetActionItemPullData"))); 
     config.Tracing.ConsoleLevel = TraceLevel.Verbose; 
     host.RunAndBlock(); 
    } 

Grüße, Vantage

+0

verwenden Sie das gleiche Speicherkonto auf einem anderen Webjob? – Thomas

+0

Ja, der gleiche Speicher – Vantage

+1

Ich habe ein ähnliches Problem mit zwei Webjobs, die beide Zeittrigger verwendet. Ich denke, dass sie verschiedene Speicherkonten verwenden müssen, da sich die Sperre auf Speicherebene befindet. Wenn also der erste Auftrag die Singleton-Sperre erwirbt, kann der zweite Auftrag nicht die gleiche Sperre oder Ähnliches erhalten. Können Sie versuchen, zwei verschiedene Speicherkonten zu verwenden? – Thomas

Antwort

1

Wenn Sie Ihren webjob bereits Azure veröffentlicht haben, stellen Sie sicher, dass es dort nicht läuft, wenn in der Zwischenzeit versuchen, es lokal auszuführen.

0

Es ist mir passiert, dass ich die Web-Jobs zu einem neuen App-Service migriert und ich bekam den gleichen Fehler. Nachdem ich alles betrachtet habe, habe ich herausgefunden, was es war:

Stellen Sie sicher, dass in Azure keine Instanz des Web-Jobs ausgeführt wird. Stoppen Sie den Web-Job in Azure. Selbst die lokale Kopie wird nicht ausgeführt, wenn Sie auf dasselbe Speicherkonto abzielen.

Das Stoppen des App-Service stoppt die Web-Jobs nicht. Sie müssen die Web-Jobs explizit anhalten.

Das Hinzufügen einer ausführlichen Protokollierungsebene hat mir sehr geholfen.

config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Verbose;