2010-12-01 20 views
8

私は明白な理由で停止している(例外がスローされていない)Azure WorkerRoleを持っています。毎回同じ場所で停止しますが、コードは実行に約20秒かかるプロセスを単に実行しています。誰もがなぜこれが起こっていると仮定することができますか?私が気づいていないOnStart()メソッドにタイムアウトがありますか?ここでAzure WorkerRoleが起動直後に停止する

は私のWorkerロールで何が起こっているかの内訳です:

のOnStart() - > [診断設定済み

ラン() - >

  1. タイマーが設定されている(60)へアプリケーションの肉をトリガーする
  2. 新しいスレッドが開始され、いくつかのデフォルト設定がロードされます(約30秒かかる)

コードは決して#1の肉には及ばない。

上記の#1では、タイマーの有無にかかわらず試しました(違いはありません)。上の#2の場合、私は新しいスレッドを開始してもいなくても試してみました(違いはありません)。

は、ここに私のWorkerロールのためのデバッグ出力です:あなたのRunメソッドが出ているよう

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

コードを投稿できますか? – Igorek

+1

私はアプリケーションがクラッシュして修正を加えた理由を理解しましたが、なぜワーカーの役割が最初にクラッシュするのかについてはまだわかりません。起動時に起動されたアプリの「設定」セクションには、実行にかなりの時間を要したメソッドがありました。私は、「設定」コードのそのセクションをオンデマンドで実行するようにしました(遅延読み込み)。それは問題を解決するように見えました。 – Jason

+0

なぜそれがクラッシュしたのか分かりましたか?私は同じ問題を抱えているようですが、例外なくデバッグするのは非常に難しいです:/ –

答えて

7

コードを見ることなく、それが聞こえます。 runメソッドが終了すると、ロールは停止します。 Visual Studioでクラウドプロジェクトに追加するときに作成されるデフォルトのワーカーロールの方法は、メソッドの最後に無限ループを置くことです。だからあなたのコードは、次のようになります。

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

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

をコメントでsmarxで述べたように、また、ループの代わりにSystem.Threading.Thread.Sleep(Timeout.Infinite)を使用することも可能です。

+1

ループの代わりに、なぜThread.Sleep(Timeout.Infinite)を使用しないのですか? – smarx

+0

主に私はそれを考えなかったので。無限ループは、それを追加するときの基本的な役割です。また、ロールがまだ実行中であることを知らせるためにX秒ごとに書き出されるトレースメッセージも与えられています。私が初期の職場の役職を務めていたとき、私はループを見て「時間の無駄」と思って削除しました。ここで経験しているような問題を引き起こす。 – knightpfhor

10

エミュレータバージョン1.6以上では、Run()のループは必要ありません。しかし、今日は同じ問題がありました。私のプロジェクトでMicrosoft.Windows.Azureアセンブリのバージョン1.7への参照を使用し、私が使用するエミュレータが10月のバージョン(1.8)から使用されていることがわかりました。 Webプロジェクトは正常に機能しますが、プロセスワーカーの役割は開始しており、あなたの説明どおりにすぐに停止しています。 OnStart、Run、OnStopは呼び出されません。作業員の役割を1.8アセンブリに参照したとき、再び作業を開始しました。もう少し時間が無駄になりました。ありがとうございました。

+0

あなたはちょうど私に数時間の調査@アレクシーを救った。ありがとう! :) http://stackoverflow.com/questions/19253015/will-azure-find-my-roleentrypoint-implementation-class-if-thats-the-direct-clas/19253556#19253556 – rui

+0

ようこそ、それは本当のAzure SDKバージョンの頭痛。 –

+0

これは、MSDNからダウンロードしたサンプルをローカルで実行していることがわかりました。 Microsoft.WindowsAzure.ServiceRuntime参照は2.5.0.0で、2.7.0.0は利用可能です。参照をアップグレードすると、問題はなくなりました。私はさらに、OnStartとRunの中の修正ブレークポイントがヒットしなかったことを確認しました。 –

関連する問題