WCF服务端基于配置的实现

WCF服务端基于配置的实现

ID:38232000

大小:19.31 KB

页数:3页

时间:2019-06-07

上传者:U-2437
WCF服务端基于配置的实现_第1页
WCF服务端基于配置的实现_第2页
WCF服务端基于配置的实现_第3页
资源描述:

《WCF服务端基于配置的实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

WCF服务端基于配置的实现——拦截   如果说到拦截器,相信大家都不陌生,所有的AOP都依赖各种形式的拦截器。为了让WCF服务端的行为发生变化,这里要借助拦截器的力量。问题:WCF里面如何创建一个拦截器?   事实上,WCF里面有很多种拦截器,分别用于拦截不同的信息。这里要改变的是方法的实现部分,因此,只要拦截WCF操作就可以达到目的。   那么,如何拦截操作哪?   如果熟悉WCF的话,那么,一定知道有这么一个接口:IOperationInvoker   这个接口的核心方法为:Invoke及其异步方法问题:如何把一个实现IOperationInvoker的实例注入WCF   仔细看一下MSDN,或者看reflector,就可以发现,所有实现IOperationInvoker的类型,几乎都是通过各种OperationBehavior加入的。   而所有的OperationBehavior都实现了一个IOperationBehavior接口。主角和设计约束   主角们在刚才的两个问题中已经全部登场了:IOperationInvoker和IOperationBehavior   剩下来的问题是如何实现这两位主角。   为了简化期间,这里只考虑这样的情况:所有的操作只有一个输入值和一个输出值,以及只有同步操作。当然这里的一个输入/输出是指一个简单或复杂值,也就说,需要传多个值时,使用一个自定义类型来包裹这多个值。实现   先说说实现IOperationInvoker,这里盗用一下MVC的概念,不妨将我们的实现控制器声明为:ControllerInvoker   简单的示意:1:internalsealedclassControllerInvoker2::IOperationInvoker3:{4: 5:privatereadonlyIOperationInvokerInner;6: 7:publicControllerInvoker(IOperationInvokerinner)8:{9:Inner=inner;10:}11: 12:publicobject[]AllocateInputs()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:publicIAsyncResultInvokeBegin(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:}    我们的Invoker目前什么好事情也没做(坏事倒是做了一桩,引入了不支持异步),别急,这个类还没完工哪。   再看看Behavior需要做什么:1:[AttributeUsage(AttributeTargets.Method,Inherited=false,AllowMultiple=false)]2:publicsealedclassControllerAttribute3::Attribute,IOperationBehavior4:{5: 6:voidIOperationBehavior.AddBindingParameters(OperationDescriptionoperationDescription,BindingParameterCollectionbindingParameters){} 7: 8:voidIOperationBehavior.ApplyClientBehavior(OperationDescriptionoperationDescription,ClientOperationclientOperation){}9: 10:voidIOperationBehavior.ApplyDispatchBehavior(OperationDescriptionoperationDescription,DispatchOperationdispatchOperation)11:{12:dispatchOperation.Invoker=newControllerInvoker(dispatchOperation.Invoker);13:}14: 15:voidIOperationBehavior.Validate(OperationDescriptionoperationDescription){}16: 17:}   好,拦截的外壳已经准备好了,来一个实例看看:1:[ServiceContract(Namespace="urn:Zhenway.Test")]2:publicinterfaceITest3:{4:[Controller]5:[OperationContract]6:TestResponseTest(TestRequestreq);7:}   是不是很简单?

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭