如果我同时附加了IParameterInspector
和IErrorHandler
服务,我可以确定IErrorHandler.HandleError()
会在调用IParameterInspector.BeforeCall()
的同一个线程上调用吗?
我需要这个,因为在抛出错误的情况下IParameterInspector.AfterCall()
永远不会被调用,并且没有办法(据我所知)我可以获得在BeforeCall()
中创建的关联状态对象。所以我希望通过在接口的实现中使用ThreadStatic
字段来克服这个问题:(
答案 0 :(得分:5)
您可能希望使用实例上下文扩展。
InstanceContextExtension: IExtension<InstanceContext>
OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()
可以在BeforeCall
方法中添加实例上下文扩展。然后可以在AfterCall
方法中检索实例上下文扩展并使用。任何特定于操作的数据都可以放在此扩展对象中,而不是引入线程关联。
答案 1 :(得分:2)
您可以让实现IErrorHandler的类也实现IParameterInspector。然后,您可以存储对相关状态的引用,并将参数作为类变量输入。然后可以从HandleError方法中访问它们。我正在使用它来记录输入参数和原始消息,只要发生未处理的异常。