私たちのWF4ワークフローサービスでは、できるだけ頑強にしようとしています。私たちがしていることの1つは、HandleErrorとProvideFault(IErrorhandler)の中にエラーを記録することです。ドキュメントの状態は明らかにそれのHandleErrorは、ロギングを行うには正しい場所でしょうが、私はいくつかの奇妙なことが起こる参照してください。ワークフローサービスのHandleErrorとProvideFaultの不一致、処理方法
私だけProvideFaultをトリガし、しかし、1例はHandleErrorは決してなかったいくつかのエラーを参照してください。
System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult..ctor
でSystem.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult.GetInstanceで () のみのHandleErrorをトリガー多少の誤差もあります。ただし、ProvideFaultは一度もありませんでした。例:
System.ServiceModel.CommunicationException:パイプからの読み取りエラー:パイプが終了しました。 (109、0x6d)。最後にあるSystem.ServiceModel.Channels.PipeConnection.Read System.ServiceModel.Channels.SessionConnectionReader.Receiveに(バイト[]バッファのInt32オフセット、のInt32のサイズ、のTimeSpanタイムアウト) (のTimeSpanタイムアウト)
で を起動するエラー、最初にProvideFault、次にHandleError(バックグラウンドスレッド)
可能であれば、対応する受信メッセージも記録したいと思います。私はOperationContext.Current.RequestContext.RequestMessage.ToString()は通常のみのHandleErrorで、ProvideFaultで動作します。この私たちはだから私の結論だった
これ以上、ALLログインするためにRequestContextのを持っていないと、これを行いますエラー、私は両方の方法でログインする必要があります。しかし、それは3のために重複したログエントリにつながります。
現在の回避策は、ProvideFaultから最後に記録された例外を「記憶」し、同じ例外がHandleErrorに入った場合は無視します。私にはあまりきれいに見えません。
ログを記録するには誰よりも信頼性の高い方法がありますすべて WFサービスで発生する可能性のあるエラー?
Logging exceptions in WCF with IErrorHandler inside HandleError or ProvideFault?は、何の助けもないので、指さないでください。