知识手册之谈WCF行为扩展

WCF行为扩展有很多值得学习的地方,大家可以上网收收资料了解一下,本人比较热爱WCF这门技术,我先给大家总结点关于WCF行为扩展的知识。WCF以其灵活的可扩展架构为开发者提供了方便,其中WCF行为扩展或许是应用中最为常见的。自定义对行为的扩展并不复杂,但仍有许多细节需要注意。

成都创新互联公司是一家业务范围包括IDC托管业务,网络空间、主机租用、主机托管,四川、重庆、广东电信服务器租用,德阳机房托管,成都网通服务器托管,成都服务器租用,业务范围遍及中国大陆、港澳台以及欧美等多个国家及地区的互联网数据服务公司。

#T#在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展,扩展点包括了对参数和消息的检查,以及操作调用程序,它们对应的接口分别为IParameterInspector,IDispatchMessageInspector以及 IOperationInvoker。而在客户端,则是对ClientRuntime和ClientOperation进行扩展,扩展点包括对参数和消息的检查,对应的接口分别为IParameterInspector和IClientMessageInspector。这些接口类型均被定义在 System.ServiceModel.Dispatcher命名空间下,其中IParameterInspector接口可以同时作用在服务端和客户端。

对这些接口的实现,有点类似于AOP的实现,可以对方法调用前和调用后注入一些额外的逻辑,所以通常会将这些扩展称为侦听器。例如IParameterInspector接口,就定义了如下方法:

 
 
  1. void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState);
  2. object BeforeCall(string operationName, object[] inputs);

在调用服务对象的目标方法前,会调用BeforeCall方法,而在调用后则会调用AfterCall方法。例如我们可在方法调用前检验计算方法的参数是否小于0,如果小于0则抛出异常:

 
 
  1. public class CalculatorParameterInspector:IParameterInspector
  2. {
  3. public void BeforeCall(string operationName, object[] inputs)
  4. {
  5. int x = inputs[0] as int;
  6. int y = inputs[1] as int;
  7. if (x <0 || y < 0)
  8. {
  9. throw new FaultException("The number can not be less than zero.");
  10. }
  11. return null;
  12. }
  13. public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
  14. {
  15. //empty;
  16. }
  17. }

对消息的检查区分了服务端和客户端,接口方法根据消息传递的顺序刚好相反[注]。我们可以通过接口方法对消息进行处理,例如打印消息的Header:

 
 
  1. public class PrintMessageInterceptor : IDispatchMessageInspector
  2. {
  3. #region IDispatchMessageInspector Members
  4. public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
  5. {
  6. MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
  7. request = buffer.CreateMessage();
  8. Console.WriteLine("After Receive Request:");
  9. foreach (MessageHeader header in request.Headers)
  10. {
  11. Console.WriteLine(header);
  12. }
  13. Console.WriteLine(new string('*', 20));
  14. return null;
  15. }
  16. public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
  17. {
  18. MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue);
  19. reply = buffer.CreateMessage();
  20. Console.WriteLine("Before Send Request:");
  21. foreach (MessageHeader header in reply.Headers)
  22. {
  23. Console.WriteLine(header);
  24. }
  25. Console.WriteLine(new string('*', 20));
  26. }
  27. #endregion

网站名称:知识手册之谈WCF行为扩展
标题链接:http://www.hantingmc.com/qtweb/news13/16313.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联