WCF行为扩展为程序开发提供极大便利

开发 开发工具
在开发人员进行一个程序开发的过程中,需要运用不同的方式来完成他们的需求,其中就需要扩展的应用。下面就介绍一下WCF行为扩展的相关应用。

WCF服务中,我们可以对行为进行扩展,来满足我们在程序开发中的各种需求。WCF以其灵活的可扩展架构为开发者提供了方便,其中对WCF行为扩展或许是应用中最为常见的。自定义对行为的扩展并不复杂,但仍有许多细节需要注意。#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);  

WCF行为扩展在调用服务对象的目标方法前,会调用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. }  

WCF行为扩展对消息的检查区分了服务端和客户端,接口方法根据消息传递的顺序刚好相反[注]。我们可以通过接口方法对消息进行处理,例如打印消息的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行为扩展的相关介绍。

责任编辑:曹凯 来源: IT168
相关推荐

2009-11-06 14:08:06

WCF行为扩展

2009-03-16 09:16:13

行为扩展WCF.NET

2011-06-30 09:54:57

Java.NETAzure

2010-02-26 10:46:12

WCF行为扩展

2014-11-14 14:40:21

亚马逊Cocos引擎

2015-09-23 19:15:14

2016-01-31 17:45:31

2014-09-25 08:17:26

2015-11-25 11:00:48

谷歌Chrome浏览器

2010-03-02 09:24:22

WCF变更行为

2010-03-02 14:41:00

WCF行为控制

2009-10-15 20:46:12

LifeSize Pa网真LifeSize

2010-03-01 14:50:30

WCF行为类型

2010-02-25 09:36:28

WCF行为控制

2014-11-26 10:23:34

数据中心SDN

2009-02-09 18:11:33

Hypervisor虚拟化微软

2021-04-26 10:04:43

AirDrop漏洞数据泄漏

2014-07-30 14:37:00

FacebookiOS开源库

2009-11-06 14:25:56

WCF接口

2011-02-15 09:05:35

重写程序
点赞
收藏

51CTO技术栈公众号