首页 / 软件开发 / WCF / 详解WCF可扩展框架中的行为扩展
详解WCF可扩展框架中的行为扩展2011-09-20 IT168 张逸WCF以其灵活的可扩展架构为开发者提供了方便,其中对行为的扩展或许是应用中最为常见的。自定义 对行为的扩展并不复杂,但仍有许多细节需要注意。在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展,扩展点包括了对参数和消息的 检查,以及操作调用程序, 它们对应的接口分别为IParameterInspector,IDispatchMessageInspector 以及 IOperationInvoker。而在客户端,则是对ClientRuntime和ClientOperation进行扩展,扩展点包括 对参数和消息 的检查,对应的接口分别为IParameterInspector和IClientMessageInspector。这些接口 类型均被定义在 System.ServiceModel.Dispatcher命名空间下,其中IParameterInspector接口可以同时 作用在服务端和客户端。对这些接口的实现,有点类似于AOP的实现,可以对方法调用前和调用后注入一些额外的逻辑,所以通 常会将这些扩展称为侦听器。例如IParameterInspector接口,就定义了如下方法:void AfterCall(string operationName, object[] outputs,
object returnValue, object correlationState);
object BeforeCall(string operationName, object[] inputs);
在调用服务对象的目标方法前,会调用BeforeCall方法,而在调用后则会调用AfterCall方法。例如我 们可在方法调用前检验计算方法的参数是否小于0,如果小于0则抛出异常:public class CalculatorParameterInspector:IParameterInspector
{
public void BeforeCall(string operationName, object[] inputs)
{
int x = inputs[0] as int;
int y = inputs[1] as int;
if (x <0 || y < 0)
{
throw new FaultException("The number can not be less than zero.");
}
return null;
}
public void AfterCall(string operationName, object[] outputs, object returnValue,
object correlationState)
{
//empty;
}
}