WCF IParameterInspector + IErrorHandler

时间:2012-10-15 08:44:53

标签: .net wcf error-handling wcf-4 wcf-extensions

如果我同时附加了IParameterInspectorIErrorHandler服务,我可以确定IErrorHandler.HandleError()会在调用IParameterInspector.BeforeCall()的同一个线程上调用吗?

我需要这个,因为在抛出错误的情况下IParameterInspector.AfterCall()永远不会被调用,并且没有办法(据我所知)我可以获得在BeforeCall()中创建的关联状态对象。所以我希望通过在接口的实现中使用ThreadStatic字段来克服这个问题:(

2 个答案:

答案 0 :(得分:5)

您可能希望使用实例上下文扩展。

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

可以在BeforeCall方法中添加实例上下文扩展。然后可以在AfterCall方法中检索实例上下文扩展并使用。任何特定于操作的数据都可以放在此扩展对象中,而不是引入线程关联。

答案 1 :(得分:2)

您可以让实现IErrorHandler的类也实现IParameterInspector。然后,您可以存储对相关状态的引用,并将参数作为类变量输入。然后可以从HandleError方法中访问它们。我正在使用它来记录输入参数和原始消息,只要发生未处理的异常。