WCF行为类型基本概念简述

开发 开发工具
WCF行为类型一般情况下会被分为四种,分别为服务行为,终结点行为,契约行为以及操作行为。我们将会针对这些类型做一个详细介绍。

开发人员在应用WCF开发工具进行实际编程时,可以利用这一平台打造一个安全性技巧的解决方案,帮助我们解决一些特定问题。下面,我们首先来看看有关WCF行为类型的相关介绍,方便大家学习。#t#

WCF行为类型总共可以分为四种:服务行为、终结点行为、契约行为和操作行为。 这四种行为分别定义了四个接口:IServiceBehavior,IEndpointBehavior,IContractBehavior以及 IOperationBehavior。虽然是四个不同的接口,但它们的接口方法却基本相同,分别为 AddBindingParameters(),ApplyClientBehavior()以及ApplyDispatchBehavior()。

注 意,IServiceBehavior由于只能作用在服务端,因此并不包含ApplyClientBehavior()方法。

我们可以定义自己的类实现这些WCF行为类型的接口,但需要注意几点:

1、行为的作用范围,可以用如下表格表示:

2、可以利用自定义特性的方式添加扩展的服务行为、契约行为和操作行为,但不能添加终结点行为;可以利用配置文件添加扩展服务行为和终结点行为,但不能添加契约行为和操作行为。但这些扩展的行为都可以通过ServiceDescription添加。

利用特性添加行为,意味着我们在定义自己的扩展行为时,可以将其派生自Attribute类,然后以特性方式添加。例如:

  1. [AttributeUsage(AttributeTargets.Class|AttributeTargets.Interface)]  
  2. public class MyServiceBehavior:Attribute, IServiceBehavior...  
  3. [MyServiceBehavior]  
  4. public interface IService...  

如果以配置文件的方式添加WCF行为类型,则必须定义一个类继承自BehaviorExtensionElement(属于命名空间System.ServiceModel.Configuration),然后重写属性BehaviorType以及 CreateBehavior()方法。BehaviorType属性返回的是扩展行为的类型,而CreateBehavior()方法则负责创建该扩展 行为的对象实例:

  1. public class MyBehaviorExtensionElement:BehaviorExtensionElement  
  2. {  
  3. public MyBehaviorExtensionElement() { }  
  4. public override Type BehaviorType  
  5. {  
  6. get { return typeof(MyServiceBehavior); }  
  7. }  
  8. protected override object CreateBehavior()  
  9. {  
  10. return new MyServiceBehavior();  
  11. }  
  12. }  

如果配置的Element添加了新的属性,则需要为新增的属性应用ConfigurationPropertyAttribute,例如:
 

  1. [ConfigurationProperty("providerName",IsRequired = true)]  
  2. public virtual string ProviderName  
  3. {  
  4. get  
  5. {  
  6. return this["ProviderName"] as string;  
  7. }  
  8. set  
  9. {  
  10. this["ProviderName"] = value;  
  11. }  
  12. }  

配置文件中的配置方法如下所示:
 

  1. < configuration> 
  2. < system.serviceModel>   
  3. < services> 
  4. < service name="MessageInspectorDemo.Calculator"> 
  5. < endpoint behaviorConfiguration="messageInspectorBehavior" 
  6. address="http://localhost:801/Calculator"   
  7. binding="basicHttpBinding"   
  8. contract="MessageInspectorDemo.ICalculator"/> 
  9. < /service> 
  10. < /services> 
  11. < behaviors> 
  12. < serviceBehaviors> 
  13. < behavior name="messageInspectorBehavior"> 
  14. < myBehaviorExtensionElement providerName="Test"/> 
  15. < /behavior> 
  16. < /serviceBehaviors> 
  17. < /behaviors> 
  18. < extensions> 
  19. < behaviorExtensions> 
  20. < add name="myBehaviorExtensionElement" 
  21. type="MessageInspectorDemo.MyBehaviorExtensionElement,
     MessageInspectorDemo,
     Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    /> 
  22. < /behaviorExtensions> 
  23. < /extensions> 
  24. < /system.serviceModel> 
  25. < /configuration>  

注意,在< serviceBehaviors>一节中,< behavior>下的< myBehaviorExtensionElement>就是我们扩展的行为,providerName则是 MyBehaviorExtensionElement增加的属性。如果扩展了IEndpointBehavior,则配置节的名称为< endpointBehaviors>。< extensions>节负责添加自定义行为的扩展。其 中,< add>中的name值与< behavior>下 的< myBehaviorExtensionElement>对应。

在对WCF行为类型操作时,特别注意的是< extensions>下的 type值,必须是类型的full name。第一个逗点前的内容为完整的类型名(包括命名空间),第二部分为完整的命名空间。Version,Culture以及 PublicKeyToken也是缺一不可的。每个逗点后必须保留一个空格,否则无法正确添加扩展行为的配置。这与反射有关,但太容易让人忽略这一小细节。希望微软能在后来的版本中修订这个瑕疵。

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

2010-03-02 13:14:38

WCF MSMQ队列

2010-02-23 16:32:29

WCF服务

2009-12-21 10:27:52

WCF基本概念

2010-03-01 18:04:35

WCF配置绑定

2009-12-21 15:33:07

WCF集合元素

2010-02-24 17:17:04

WCF宿主环境

2010-03-01 16:25:07

WCF体系架构

2009-12-21 16:52:02

WCF序列化

2010-03-02 16:22:31

WCF状态应用

2010-03-01 16:41:04

WCF数据表

2009-12-21 14:37:14

2009-12-22 10:16:54

WCF服务状态

2010-03-02 11:10:43

WCF标准终结点

2010-02-25 14:46:31

2010-03-01 17:57:11

WCF缓存机制

2010-02-03 11:11:18

C++类型转换

2011-03-28 11:05:17

ODBC

2010-03-03 15:10:49

第三方Python库

2014-04-16 15:11:19

Spark

2012-09-11 14:39:03

Moosefs
点赞
收藏

51CTO技术栈公众号