欢迎来到天天文库
浏览记录
ID:38232000
大小:19.31 KB
页数:3页
时间:2019-06-07
《WCF服务端基于配置的实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WCF服务端基于配置的实现——拦截 如果说到拦截器,相信大家都不陌生,所有的AOP都依赖各种形式的拦截器。为了让WCF服务端的行为发生变化,这里要借助拦截器的力量。问题:WCF里面如何创建一个拦截器? 事实上,WCF里面有很多种拦截器,分别用于拦截不同的信息。这里要改变的是方法的实现部分,因此,只要拦截WCF操作就可以达到目的。 那么,如何拦截操作哪? 如果熟悉WCF的话,那么,一定知道有这么一个接口:IOperationInvoker 这个接口的核心方法为:Invoke及其异步方法问题:如何把一个实现IOperationInvoker的实例注入WCF 仔细看一下M
2、SDN,或者看reflector,就可以发现,所有实现IOperationInvoker的类型,几乎都是通过各种OperationBehavior加入的。 而所有的OperationBehavior都实现了一个IOperationBehavior接口。主角和设计约束 主角们在刚才的两个问题中已经全部登场了:IOperationInvoker和IOperationBehavior 剩下来的问题是如何实现这两位主角。 为了简化期间,这里只考虑这样的情况:所有的操作只有一个输入值和一个输出值,以及只有同步操作。当然这里的一个输入/输出是指一个简单或复杂值,也就说,需要传多个值时,
3、使用一个自定义类型来包裹这多个值。实现 先说说实现IOperationInvoker,这里盗用一下MVC的概念,不妨将我们的实现控制器声明为:ControllerInvoker 简单的示意:1:internalsealedclassControllerInvoker2::IOperationInvoker3:{4: 5:privatereadonlyIOperationInvokerInner;6: 7:publicControllerInvoker(IOperationInvokerinner)8:{9:Inner=inner;10:}11: 12:publicobject[]A
4、llocateInputs()13:{14:returnInner.AllocateInputs();15:}16: 17:publicobjectInvoke(objectinstance,object[]inputs,outobject[]outputs)18:{19://dosomethingbeforeinvoking20:objectresult=Invoke(instance,inputs,outoutputs);21://dosomethingafterinvoking22:returnresult;23:}24: 25:publicIAsyncResultInvokeBeg
5、in(objectinstance,object[]inputs,AsyncCallbackcallback,objectstate)26:{27:thrownewNotSupportedException();28:}29: 30:publicobjectInvokeEnd(objectinstance,outobject[]outputs,IAsyncResultresult)31:{32:thrownewNotSupportedException();33:}34: 35:publicboolIsSynchronous36:{37:get{returntrue;}38:}39:}
6、 我们的Invoker目前什么好事情也没做(坏事倒是做了一桩,引入了不支持异步),别急,这个类还没完工哪。 再看看Behavior需要做什么:1:[AttributeUsage(AttributeTargets.Method,Inherited=false,AllowMultiple=false)]2:publicsealedclassControllerAttribute3::Attribute,IOperationBehavior4:{5: 6:voidIOperationBehavior.AddBindingParameters(OperationDescriptionoper
7、ationDescription,BindingParameterCollectionbindingParameters){}7: 8:voidIOperationBehavior.ApplyClientBehavior(OperationDescriptionoperationDescription,ClientOperationclientOperation){}9: 10:voidIOperationBehavio
此文档下载收益归作者所有