8

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

以下は、私の worker ロールで何が起こっているかの内訳です。

OnStart() -> 診断設定済み

ラン() ->

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

コードは #1 の要点に到達することはありません。

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

ワーカー ロールのデバッグ出力は次のとおりです。

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).
4

2 に答える 2

10

Run() でのループは、少なくともエミュレータ バージョン 1.6 以降では必要ありません。しかし、今日も同じ問題が発生しました。原因を突き止めるために数時間を費やしたところ、私のプロジェクトでは Microsoft.Windows.Azure アセンブリ バージョン 1.7 への参照が使用されており、使用しているエミュレーターは 10 月バージョン (1.8) のものであることがわかりました。Web プロジェクトは正常に動作しますが、プロセス ワーカーの役割が開始され、説明したようにすぐに停止します。OnStart、Run、および OnStop は呼び出されません。worker ロールを 1.8 アセンブリに参照すると、再び機能し始めました。さらに数時間が無駄になりました。マイクロソフトに感謝します...

于 2012-11-08T18:26:08.253 に答える
7

コードを表示しないと、Run メソッドが終了しているように聞こえます。run メソッドが終了すると、ロールは停止します。Visual Studio でクラウド プロジェクトに追加するときに作成される既定の worker ロールがこれを行う方法は、メソッドの最後に無限ループを配置することです。したがって、コードは次のようになります。

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

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

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

于 2010-12-01T22:47:20.717 に答える