[英]WCF IParameterInspector + IErrorHandler
如果我同时将IParameterInspector
和IErrorHandler
附加到服务,是否可以确保在调用IErrorHandler.HandleError()
的同一线程上IParameterInspector.BeforeCall()
?
我之所以需IParameterInspector.AfterCall()
,是因为在发生错误的情况下,永远不会调用IParameterInspector.AfterCall()
而且也无法(据我所知)我可以在BeforeCall()
创建关联状态对象。 因此,我希望通过在我的接口实现中使用ThreadStatic
字段来克服这一问题:(
您可能要利用实例上下文扩展。
InstanceContextExtension: IExtension<InstanceContext>
OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()
实例上下文扩展可以添加在BeforeCall
方法中。 然后可以在AfterCall
方法中检索实例上下文扩展并使用。 可以将任何特定于操作的数据放在此扩展对象中,而不用引入线程亲缘关系。
您可以让实现IErrorHandler的类也实现IParameterInspector。 然后,您可以将对相关状态的引用和输入参数存储为类变量。 然后可以从HandleError方法中访问它们。 每当发生未处理的异常时,我目前都在使用它来记录输入参数和原始消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.