2

両方がIParameterInspectorありIErrorHandler、サービスに接続されている場合IErrorHandler.HandleError()、呼び出された同じスレッドで呼び出されることを確認できIParameterInspector.BeforeCall()ますか?

これが必要なのは、スローされた障害IParameterInspector.AfterCall()が呼び出されず、(私の知る限り) で作成された相関状態オブジェクトを取得する方法がないためBeforeCall()です。したがって、インターフェイスの実装にフィールドを含めることで、これを克服したいと考えてThreadStaticいます:(

4

2 に答える 2

5

インスタンス コンテキスト拡張を利用することもできます。

InstanceContextExtension: IExtension<InstanceContext>   
OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()

BeforeCallインスタンス コンテキスト拡張は、メソッドに追加できます。その後、インスタンス コンテキスト拡張をAfterCallメソッドで取得して使用できます。スレッド アフィニティを導入する代わりに、操作固有のデータをこの拡張オブジェクトに入れることができます。

于 2012-10-15T10:11:43.410 に答える
2

IErrorHandlerを実装するクラスにIParameterInspectorも実装させることができます。次に、相関状態への参照と入力パラメーターをクラス変数として格納できます。そうすれば、HandleErrorメソッド内からアクセスできるようになります。私は現在、未処理の例外が発生するたびに入力パラメーターと生のメッセージをログに記録するためにこれを使用しています。

于 2012-10-15T09:42:12.780 に答える