WCF配置文件详细解析
创始人
2024-06-23 05:51:33
0

WCF开发工具是微软公司开发的一款面向服务的应用提供的分布式通信编程框架,在实际应用中起到了非常重要的作用。今天我们将会在这篇文章中为大家详细介绍有关WCF配置文件的相关概念。#t#

当今的软件系统开发,如果没有配置文件几乎是不可想象的事。没有配置文件,软件如何按照用户的要求对功能进行定制?没有配置文件,在对软件进行配置安装的时候如何根据具体的硬软件环境进行修改?最重要的是没有配置文件,该如何应对软件系统的可扩展要求?不知不觉地,配置文件的编写与管理竟然成了软件开发的重中之重。

WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法。虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期的更改。无疑,配置文件为WCF带来了软件开发的灵活性,它的使用也是WCF开发过程中最频繁的。

WCF配置文件共分为两部分:服务端配置与客户端配置。两者由于功能的不同,在配置文件的使用上也略有不同。

1.WCF配置文件的服务端配置

服务端的配置文件主要包括endpoint、binding、behavior的配置。一个标准的服务端配置文件所包含的主要xml配置节如下所示:

  1. < system.ServiceModel> 
  2. < services> 
  3. < service> 
  4. < endpoint/> 
  5. < /service> 
  6. < /services> 
  7. < bindings> 
  8. < !—定义一个或多个系统提供的binding元素,例如< basicHttpBinding> -->   
  9. < !—也可以是自定义的binding元素,如< customBinding>. --> 
  10. < binding> 
  11. < !—例如< BasicHttpBinding>元素. --> 
  12. < /binding> 
  13. < /bindings> 
  14. < behaviors> 
  15. < !—一个或多个系统提供的behavior元素. --> 
  16. < behavior> 
  17. < !—例如< throttling>元素. --> 
  18. < /behavior> 
  19. < /behaviors> 
  20. < /system.ServiceModel> 

1.1 < services>配置节

在< services>配置节中可以定义多个服务,每一个服务都被放到< service>配置节中,WCF的宿主程序可以通过WCF配置文件找到这些定义的服务并发布这些服务。

< service>配置节包含name和behaviorConfiguration属性。其中,name配置了实现Service Contract的类型名。类型名必须是完整地包含了命名空间和类型名。而behaviorConfiguration的配置值则与其后的< behaviors>配置节的内容有关。< endpoint>是< service>配置节的主体,其中,< endpoint>配置节包含了endpoint的三个组成部分:Address、Binding和Contract。由于具体的binding配置是在< bindings>配置节中完成,因而,在< endpoint>中配置了bindingConfiguration属性,指向具体的binding配置。如下所示:

  1. < services> 
  2. < service name="BruceZhang.MyService"
     behaviorConfiguration="MyBehavior"> 
  3. < endpoint address="" 
  4. binding="netTcpBinding" 
  5. bindingConfiguration="DuplexBinding" 
  6. contract="BruceZhang.IHello" /> 
  7. < /service> 
  8. < /services> 

 

我们也可以定义多个endpoint,例如:

  1. < services> 
  2. < service   
  3. name="Microsoft.ServiceModel.Samples.CalculatorService" 
  4. behaviorConfiguration="CalculatorServiceBehavior"> 
  5. < endpoint address="" 
  6. binding="wsHttpBinding" 
  7. contract="Microsoft.ServiceModel.Samples.ICalculator" /> 
  8. < endpoint address="mex" 
  9. binding="mexHttpBinding" 
  10. contract=" Microsoft.ServiceModel.Samples.IMetadataExchange" /> 
  11. < /service> 
  12. < /services> 

 

如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/service.svc,而IMetadataExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。这里所谓的基地址可以在< service>中通过配置< host>来定义:

  1. < service   
  2. name="Microsoft.ServiceModel.Samples.CalculatorService" 
  3. behaviorConfiguration="CalculatorServiceBehavior"> 
  4. < host> 
  5. < baseAddresses> 
  6. < add baseAddress=  
  7. "http://localhost/ServiceModelSamples/service.svc"/> 
  8. < /baseAddresses> 
  9. < /host> 
  10. < endpoint … /> 
  11. < /service> 

 

1.2 < behaviors>配置节

当我们在定义一个实现了Service Contract的类时, binding和address信息是客户端必须知道的,否则无法调用该服务。然而,如果需要指定服务在执行方面的相关特性时,就必须定义服务的behavior。在WCF中,定义behavior就可以设置服务的运行时属性,甚至于通过自定义behavior插入一些自定义类型。例如通过指定ServiceMetadataBehavior,可以使WCF服务对外公布Metadata。配置如下:

  1. < behaviors> 
  2. < serviceBehaviors> 
  3. < behavior name="metadataSupport"> 
  4. < serviceMetadata httpGetEnabled="true" httpGetUrl=""/> 
  5. < /behavior> 
  6. < serviceBehaviors> 
  7. < behaviors> 

 

在WCF中,behavior被定义为Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。虽然,behavior作为Attribute可以通过编程的方式直接施加到服务上,但出于灵活性的考虑,将behavior定义到WCF配置文件中才是***的设计方式。

利用ServiceBehavior与OperationBehavior可以控制服务的如下属性:

  1. 1、 对象实例的生命周期;  
  2. 2、 并发与异步处理;  
  3. 3、 配置行为;  
  4. 4、 事务行为;  
  5. 5、 序列化行为;  
  6. 6、 元数据转换;  
  7. 7、 会话的生命周期;  
  8. 8、 地址过滤以及消息头的处理;  
  9. 9、 模拟(Impersonation); 

 

例如,通过ServiceBehavior设置对象实例的生命周期:

  1. < behaviors> 
  2. < serviceBehaviors> 
  3. < behavior name="metadataSupport"> 
  4. < instanceContextMode httpGetEnabled="true" httpGetUrl=""/> 
  5. < /behavior> 
  6. < serviceBehaviors> 
  7. < behaviors> 

以上就是对WCF配置文件的详细介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...