2010-12-01 5 views
8

J'ai un Azure WorkerRole qui s'arrête (aucune exception n'est levée) sans raison apparente. Il s'arrête au même endroit à chaque fois, mais le code exécute simplement un processus qui dure environ 20 secondes. Quelqu'un peut-il postuler pourquoi cela se produit? Y at-il un délai d'expiration sur la méthode OnStart() dont je ne suis pas au courant?Azure WorkerRole Arrêt immédiat après le démarrage

Voici une ventilation de ce qui se passe dans mon travailleur rôle:

OnStart() -> Diagnostics Configuré

Run() ->

  1. Une minuterie est réglée (60) déclencher la viande de l'application
  2. Un nouveau thread est démarré pour charger certains paramètres par défaut (prend ~ 30 secondes)

Le code n'arrive jamais à la viande de # 1.

Pour # 1 ci-dessus, je l'ai essayé avec et sans minuterie (pas de différence). Pour # 2 ci-dessus, je l'ai essayé avec et sans démarrer un nouveau thread (pas de différence).

est ici la sortie de débogage pour mon rôle de travailleur:

WaWorkerHost.exe Information: 0 : deployment(108).ApiAzure.Workers.0 - Workers.OnStart() 
Microsoft.WindowsAzure.ServiceRuntime Information: 202 : Role entrypoint . COMPLETED OnStart() 
The thread 'Role Initialization Thread' (0x29fc) has exited with code 0 (0x0). 
Microsoft.WindowsAzure.ServiceRuntime Information: 203 : Role entrypoint . CALLING Run() 
'WaWorkerHost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Jason A. Kiesel\Projects\FS_CITYSOURCED\WorkersAzure\bin\Stage\WorkersAzure.csx\roles\Workers\approot\FreedomSpeaks.Logging.dll', Symbols loaded. 
Microsoft.WindowsAzure.ServiceRuntime Warning: 204 : Role entrypoint . COMPLETED Run() ==> ROLE RECYCLING INITIATED 
Microsoft.WindowsAzure.ServiceRuntime Information: 503 : Role instance recycling is starting 
The thread 'Role Start Thread' (0x1fa0) has exited with code 0 (0x0). 
The thread '<No Name>' (0x1624) has exited with code 0 (0x0). 
'WaWorkerHost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll' 
'WaWorkerHost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll' 
'WaWorkerHost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll' 
'WaWorkerHost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
Microsoft.WindowsAzure.ServiceRuntime Information: 205 : Role entrypoint . CALLING OnStop() 
WaWorkerHost.exe Information: 0 : deployment(108).ApiAzure.Workers.0 - Workers.OnStop() 
Microsoft.WindowsAzure.ServiceRuntime Information: 206 : Role entrypoint . COMPLETED OnStop() 
The thread 'Role Stop Thread' (0x2dac) has exited with code 0 (0x0). 
The program '[12228] WaWorkerHost.exe: Managed (v4.0.30319)' has exited with code -66053 (0xfffefdfb). 
+0

Pouvez-vous poster le code? – Igorek

+1

J'ai compris pourquoi l'application plantait et mettait un correctif, mais cela n'a toujours pas de sens pour moi de savoir pourquoi le rôle de l'ouvrier planterait en premier lieu. La section "config" de l'application qui a été déclenchée au démarrage avait une méthode qui prenait beaucoup de temps à s'exécuter. J'ai déplacé cette section du code "config" à exécuter à la demande (paresseux chargé). Cela semblait régler le problème. – Jason

+0

Comment avez-vous compris pourquoi il s'écrase? Je semble avoir le même problème, mais sans exception, il est assez difficile à déboguer:/ –

Répondre

7

Sans voir le code, il semble que votre méthode Run est sortie. Si la méthode d'exécution se ferme jamais, le rôle s'arrêtera. La façon dont le rôle de travail par défaut créé lorsque vous ajoutez à un projet de cloud dans Visual Studio consiste à mettre une boucle infinie à la fin de la méthode. Donc, votre code pourrait ressembler à ceci:

public override void Run() 
{ 
    StartMyTimer(); 
    LoadDefaultSettings(); 

    while (true) 
    { 
     CheckToMakeSureSpawnedThreadsAreRunningOK(); 
     System.Threading.Thread.Sleep(10000); 
    } 
} 

Comme mentionné par Smarx dans les commentaires, il serait également possible d'utiliser System.Threading.Thread.Sleep(Timeout.Infinite) au lieu de la boucle.

+1

Au lieu de la boucle, pourquoi pas Thread.Sleep (Timeout.Infinite)? – smarx

+0

Principalement parce que je n'y avais pas pensé. La boucle infinie car c'est ce qui est dans le rôle de base lorsque vous en ajoutez un. Accordé il a également un message de trace qui est écrit toutes les X secondes pour vous faire savoir que le rôle est toujours en cours d'exécution.Quand je construisais l'un de mes premiers rôles de travail, j'ai aussi regardé la boucle et je me suis dit "quelle perte de temps" et je l'ai effacé. Provoquer un problème comme ce qui est vécu ici. – knightpfhor

10

La boucle dans Run() n'est pas requise au moins dans l'émulateur version 1.6 ou ultérieure. Cependant, j'ai eu le même problème aujourd'hui. J'ai passé quelques heures à découvrir ce que la raison pourrait être et j'ai trouvé que mon projet utilise des références à des assemblys Microsoft.Windows.Azure version 1.7 et l'émulateur que j'utilise est de la version d'octobre (1.8). Les projets Web fonctionnent très bien, mais les rôles de travail de processus commencent et s'arrêtent immédiatement comme vous le décrivez. OnStart, Run et OnStop ne sont simplement pas appelés. Lorsque j'ai référencé mon rôle de travail dans les assemblages 1.8, il a recommencé à fonctionner. Encore quelques heures gaspillées, merci Microsoft ...

+0

Vous venez de me sauver quelques heures d'enquête @Alexey. Merci! :) http://stackoverflow.com/questions/19253015/will-azure-find-my-roleentrypoint-implementation-class-if-thats-the-direct-clas/19253556#19253556 – rui

+0

Bienvenue, c'est un vrai des maux de tête avec les versions Azure SDK. –

+0

J'ai observé cela en cours d'exécution localement un échantillon téléchargé à partir de MSDN. La référence Microsoft.WindowsAzure.ServiceRuntime était 2.5.0.0 tandis que la version 2.7.0.0 était disponible. La mise à niveau de la référence a fait disparaître le problème. J'observerais en outre qu'avant que les points d'arrêt de correction dans OnStart et Exécuter n'aient été touchés. –

Questions connexes