如果我将IParameterInspector和IErrorHandler都附加到一个服务,我能确保IErrorHandler.HandleError()会在调用IParameterInspector.BeforeCall()的同一线程上被调用吗?
我之所以需要它,是因为在抛出错误的情况下,IParameterInspector.AfterCall()永远不会被调用,并且(据我所知)我无法获得在BeforeCall()中创建的关联状态对象。因此,我希望通过在接口的实现中使用ThreadStatic字段来克服这个问题:(
发布于 2012-10-15 18:11:43
您可能希望利用实例上下文扩展。
InstanceContextExtension: IExtension<InstanceContext>
OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()可以在BeforeCall方法中添加实例上下文扩展。然后可以在AfterCall方法中检索和使用实例上下文扩展。任何特定于操作的数据都可以放在这个扩展对象中,而不是引入线程亲和性。
发布于 2012-10-15 17:42:13
您可以让实现IErrorHandler的类也实现IParameterInspector。然后,您可以将对关联状态和输入参数的引用存储为类变量。然后就可以从HandleError方法中访问它们了。我目前使用它来记录输入参数和每当发生未处理的异常时的原始消息。
https://stackoverflow.com/questions/12892055
复制相似问题