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 回答