Azure WorkerRole stoppt unmittelbar nach dem Start

8

Ich habe eine Azure WorkerRole, die ohne ersichtlichen Grund aufhört (es werden keine Ausnahmen ausgelöst). Es stoppt jedes Mal an der gleichen Stelle, aber der Code führt einfach einen Prozess aus, der ungefähr 20 Sekunden dauert. Kann jemand postulieren, warum dies geschieht? Gibt es ein Zeitlimit für die OnStart () -Methode, die mir nicht bekannt ist?

Hier ist eine Zusammenfassung dessen, was in meiner Arbeiterrolle passiert:

OnStart () - & gt; Diagnose konfiguriert

Ausführen () - & gt;

  1. Ein Timer ist eingestellt (60), um das Fleisch der Anwendung auszulösen
  2. Ein neuer Thread wird gestartet, um einige Standardeinstellungen zu laden (dauert ~ 30 Sekunden)

Der Code kommt niemals zum Fleisch von # 1.

Für # 1 oben habe ich es mit und ohne Timer probiert (kein Unterschied). Für # 2 oben habe ich es mit und ohne einen neuen Thread versucht (kein Unterschied).

Hier ist die Debug-Ausgabe für meine Worker-Rolle:

%Vor%     
Jason 01.12.2010, 21:42
quelle

2 Antworten

10

Loop in Run () ist mindestens in der Emulatorversion 1.6 oder höher nicht erforderlich. Allerdings habe ich heute dasselbe Problem. Ich verbrachte ein paar Stunden, um herauszufinden, was der Grund sein könnte und fand, dass mein Projekt Verweise auf Microsoft.Windows.Azure Assemblies Version 1.7 verwendet und der Emulator, den ich verwende, ist von der Oktober-Version (1.8). Web-Projekte funktionieren gut, aber Prozess-Worker-Rollen starten und stoppen sofort, wie Sie es beschreiben. OnStart, Run und OnStop werden nur nicht aufgerufen. Als ich meine Worker-Rolle auf 1.8-Assemblies referenzierte, begann es erneut zu arbeiten. Noch ein paar Stunden verschwendet, danke Microsoft ...

    
Alexey Zimarev 08.11.2012 18:26
quelle
7

Ohne den Code zu sehen, klingt es so, als wäre Ihre Run-Methode beendet. Wenn die Laufmethode jemals beendet wird, wird die Rolle gestoppt. Die Standardarbeitserrolle, die beim Hinzufügen zu einem Cloud-Projekt in Visual Studio erstellt wird, besteht darin, eine Endlosschleife am Ende der Methode einzufügen. Ihr Code könnte also ähnlich aussehen:

%Vor%

Wie von smarx in den Kommentaren erwähnt, wäre es auch möglich, System.Threading.Thread.Sleep(Timeout.Infinite) anstelle der Schleife zu verwenden.

    
knightpfhor 01.12.2010 22:47
quelle

Tags und Links