2

1つのWebロールと1つのワーカーロールを持つプロジェクトがあります。ローカルでテストするときはいつでも、Webとワーカーの両方の役割が意図したとおりに機能します。(ローカルバージョンはAzure Compute Emulatorを使用しますが、Service Busキューとメッセージキューはライブクラウドバージョンを使用することに注意してください。)ただし、Cloud Serviceワーカーの役割は、特定の操作中にクラッシュする傾向があります。インスタンスが「リサイクル」され、メッセージがAzureServiceBusキューでスタックします。クラウドサービスをローカルで実行して初めて、メッセージが正常に処理され、キューから削除されます。ロールが機能している場合でも、Azureはダッシュボードで、ワーカーロールが「異常」に実行されていることを通知することがよくあります。

ある時点で、Azureポータルは次のエラーを出力しました。

未処理の例外:System.Reflection.ReflectionTypeLoadException

このためにプロジェクトに例外処理を追加し、更新をクラウドにデプロイした後に再試行しましたが、同じことが引き続き発生します。プロジェクトに例外処理を追加したとき、System.Reflectionライブラリをワーカーロールに追加する必要がありましたが、これはさらに混乱しました。プロジェクトで最初に使用していなかったライブラリへの呼び出しでエラーが発生する理由がわかりません。

この問題が何であるかについて誰かが何か考えを持っていますか?

アップデート:

手動でデバッグしたところ、ワーカーロールのRun()で例外が呼び出されていることに気付きました。問題の原因となるコード行には、EntityFrameworkを使用してデータベースを呼び出すことが含まれます。具体的な行は次のとおりです。

画像imageEntity=db.Images.Find(ImgViewFromQueue.Id);

この問題は、AzureサーバーでEntityFrameworkが有効化または構成されていないことに関係しているのではないかと思います。

4

2 に答える 2

1

OSFamily=3 (Server 2012) でワーカー ロールを実行すると、同様の問題が発生しました。3 で実行していて、2 にロールバックできる場合は、worker ロールが問題なく機能することがあります。Azure サポート エンジニアの助けを借りて質問に回答しました - Azure Worker Role は osFamily="2" (Server 2008R2) で実行されますが、osFamily="3" (Server 2012) では失敗します

違い: OS ファミリ 2 では、WaWorkerHost は役割の初期化プロセスによって生成された一時的なアカウント (GUID 名を持つ) で実行され、このアカウントには特別なアクセス許可があります。OS ファミリ 3 では、WaWorkerHost は「NETWORK SERVICE」アカウントで実行されています。このアカウントには、worker ロールに対するいくつかの権限がありません。

OSfamily 3 が必要な場合は、権限を昇格して実行してみてください。cscfg ファイルの<WorkerRole>要素に、子を追加します。

<Runtime executionContext="elevated" />
于 2012-12-12T03:39:33.837 に答える
0

InelliTrace を有効にしてパッケージを再デプロイできるかどうかわからない場合は、システムで実際の例外が見つかることを願っています。ちょうど私の2セント。

于 2012-12-12T05:44:57.340 に答える