如果我创建了一个实现IParameterInspector的类,并使用自定义ServiceBehavior将其插入到WCF管道中,那么在调用BeforeCall和AfterCall时是否会使用该类的同一个实例?换句话说,我可以在AfterCall中建立我可以在AfterCall中访问的当前调用的状态,并确保响应将来自同一个实例吗?
注意下面示例代码中的_stateValue?我可以依赖这样的机制吗?
class OperationParameterInspector : IParameterInspector
{
public int _stateValue;
public object BeforeCall(string operationName, object[] inputs)
{
_stateValue = (int) inputs[0];
return null;
}
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
int originalInput = _stateValue;
return;
}
}
答案 0 :(得分:2)
传递与特定调用相关的状态是BeforeCall
的返回值和correlationState
的{{1}}参数的目的。 WCF基础结构确保在操作完成后,您从AfterCall
返回的任何对象都会通过BeforeCall
传递到AfterCall
。
正如您后续评论所暗示的那样,在inspector对象中使用实例状态的问题是在某些情况下可能在并发请求之间共享实例。但是,我认为在BeforeCall和AfterCall中不同的参数检查器对象可以提供单个操作请求的任何情况。