2012-02-19 5 views
6

私たちには、IOスレッドなどで多くの補完を伴う非常に非同期の作業負荷を実行するAzureワーカーロールがあります。未処理の例外が破損しないようにするAzureの作業者ロール

私たちが所有していない非同期コールバックで処理されない例外が発生することがあります。その結果、ロールが失敗します。

非AzureのASP.NETアプリケーションで

、我々はこのようaspnet.configでレガシー未処理の例外ポリシーを有効にすることで、これを避けることができます。

<configuration> 
    <runtime> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
    <runtime> 
<configuration> 

Azureの労働者のために同じことをする方法はあります役割?これを役割プロジェクトのapp.configに配置しようとしましたが、これはうまくいかなかった(WaWorkerHost.exe.configに何らかの形で取り込まなければならない可能性が高いため)。

私たちはAppDomain.CurrentDomain.UnhandledExceptionApplication.SetUnhandledExceptionModeHow to catch an unhandled exception in Windows Azure (Worker) Roleを認識しており、これらは問題を解決しません。

+0

まだ答えを探しています! – ionwarp

答えて

0

あなたのスレッドを読むだけで、webroleと同じことが起こります。これでコードスニペットを追加し、このエラーが再び発生するかどうかを確認しました。 AppDomainクラスに関するいくつかの調査を行った:http://msdn.microsoft.com/en-us/library/system.appdomain.aspx実際、私は未処理の例外ポリシーを探していましたが、見つけられませんでした。しかし、イベント "UnhandledException" http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspxが見つかりました。

あなたはこれを書いていません。これは後で私にも当てはまるでしょう - 私は紺碧の労働者の役割で第三者のオープンソースコンポーネントを実行します - 私はいくつかの研究を行いました。

3番目のparyコードの新しいAppDomainを作成しようとします。例外が発生した場合は、新しく作成されたAppDomainがクラッシュ/アンロードされますが、現在のコードは実行されません。新しいプロセスは、私はより多くの仕事をすると思います。

EDIT: このトピックの再訪:バージョン2.0では、スレッド(メインスレッドではない)がクラスライブラリでエラーを起こした場合にアプリケーションドメインを破棄するために導入されました。それは、別々のApplicationDomainでさえ助けにならないようです。私が理解しているように、このデザインはライブラリレベルで例外をキャッチして適切に処理することで、ライブラリに隠されたエラーをデバッグするのに役立ちます。しかし、私を苛立たせるもの - 私たちが管理していないサードパーティのクラスライブラリを使用するとどうなりますか?それで、ベンダーが私たちに必要な時にそれを解決するための問題が小さい場合、私たちは立ち往生しているようです。

+0

Marc、可能であれば私はより良い答えを探しています。それはappdomains(それが分解されるとappdomain状態を失うのは望ましくない)を管理すること、または独自のプロセスを作成することを必要とするものです。 – ionwarp

関連する問題