2009-07-10 9 views
2

WCFサービスは、クライアントが気にしないものを処理するために、ときどきワーカースレッドを生成します。ワーカースレッドは、ステータスをクライアントに報告しません。実際には、サービスはスレッドが終了するまでにすでにクライアントに結果を返している可能性があります。WCFのスレッド例外の処理

これらのバックグラウンドスレッドの1つでは最近例外が発生しました。例外は処理されず、IISがクラッシュしました。

私はこの特定の例外を修正できますが、将来他の予期しない例外を引き起こすコードを追加する可能性があります。私はこれが将来IISをクラッシュさせないようにしたい。

私はSystem.Windows.FormsアプリケーションがApplication.ThreadExceptionを実装することによってスレッド例外を処理できることを知っています。 WCFサービスと同様のことはありますか?またはApplication.ThreadExceptionが行く方法であれば、どうすればWCFサービスから接続できますか?

AppDomain.UnhandledExceptionのMSDNのドキュメントには、クラッシュを防止しないと記載されています。 ServiceModel.AsynchronousThreadExceptionHandlerのドキュメントは、それがWCFスレッドのためだけであることを示しています。

少なくとも、クラッシュする前に例外からスタックトレースを取得したいが、将来のクラッシュを完全に避けることが理想的である。

また、これは例外ではなく、クライアントにWCF障害として戻すことを強調しておきます。

答えて

1

例外が発生した原因がわからないため、賢明なことはクラッシュです。あなたはサービスがどの州にあるか分かりませんし、続けることによって物事を悪化させる可能性があります。

IISがサービスを再起動し、きれいになり、おそらく動作することを覚えておいてください。

+1

downvoteの理由を言って下さい。アンサーは、何が間違っているかを知らなければ、改善することはまずありません。 –

+0

私はこれに同意します...予想される例外がある場合は、その起源に近いものを処理する必要があります。予期しない場合は、アプリがクラッシュする可能性があります。 –

+0

ワーカースレッド内のコードは、未知の状態にあるものを残してしまったようなものは何もしません。 IIS自体が攻撃されない限り、私はむしろクラッシュすることはありません。私はむしろ問題をログに記録し、それに沿って頑張ってください。 (私は何も投票しなかったことに注意してください) –

1

スレッドを生成する場合は、常にに例外ガードがあることを確認する必要があります。未処理の例外に対するAppDomainの処理は、エラーのログとトレースの方法を提供しますが、ホストがクラッシュするのを止めることはありません。あなたは派遣の動作でIErrorHandlerを実装を見てみることができ

+0

ええ、私はみんなが高レベルのtry/catchでスレッドメソッドをラップすることを望んでいます。 WCFサービスのAppDomain.UnhandledExceptionハンドラをどのように接続しますか? –

+0

ドメインの起動時に行う必要があります。これは、カスタムホストを持っている場合はスタートアップコードの中のものか、通常のasp.netアプリケーションのように、IISでホストしている場合はGlobal.asaxにあります。 – tomasr