WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时, 都使用了配置文件的方法。WCF的配置文件共分为两部分:服务端配置与客户端配置。两者由于功能的不同,在配置文件的使用上也略有不同。
【引自张逸的 博客】WCF配置文件全攻略
当今的软件系统开发,如果没有配置文件几乎是不可想象的事。没有配置文件,软件如何按照用户的要求对功能进行定制? 没有配置文件,在对软件进行配置安装的时候如何根据具体的硬软件环境进行修改?最重要的是没有配置文件,该如何应对软件系统的可扩展要求?不知不觉地,配 置文件的编写与管理竟然成了软件开发的重中之重。
WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法。虽然WCF也提 供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期的更改。无疑,配置文件为WCF带来了软件开 发的灵活性,它的使用也是WCF开发过程中最频繁的。
WCF的配置文件共分为两部分:服务端配置与客户端配置。两者由于功能的不同,在配置文件的使用上也略有不同。
1、WCF的服务端配置
服务端的配置文件主要包括endpoint、binding、behavior的配置。一个标准的服务端配置文件所 包含的主要xml配置节如下所示:
<system.ServiceModel> <services> <bindings> <behaviors> </system.ServiceModel> |
1.1、配置节
在配置节中可以定义多个服务,每一个服务都被放到配置节中,WCF的宿主程 序可以通过配置文件找到这些定义的服务并发布这些服务。
配置节包含name和behaviorConfiguration属性。其中,name配置了实 现Service Contract的类型名。类型名必须是完整地包含了命名空间和类型名。而behaviorConfiguration的配置值则与其后的配 置节的内容有关。是配置节的主体,其中,配置节包含了endpoint的三个组成部 分:Address、Binding和Contract。由于具体的binding配置是在配置节中完成,因而,在中 配置了bindingConfiguration属性,指向具体的binding配置。如下所示:
<services> |
我们也可以定义多个endpoint,例如:
<services> |
如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/service.svc, 而IMetadataExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。 这里所谓的基地址可以在中通过配置来定义:
<service |
1.2、配置节
当我们在定义一个实现了Service Contract的类时, binding和address信息是客户端必须知道的,否则无法调用该服务。然而,如果需要指定服务在执行方面的相关特性时,就必须定义服务的 behavior。在WCF中,定义behavior就可以设置服务的运行时属性,甚至于通过自定义behavior插入一些自定义类型。例如通过指定 ServiceMetadataBehavior,可以使WCF服务对外公布Metadata。配置如下:
<behaviors> |
在WCF中,behavior被定义为Attribute,其 中,System.ServiceModel.ServiceBehaviorAttribute和 System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。虽然,behavior作 为Attribute可以通过编程的方式直接施加到服务上,但出于灵活性的考虑,将behavior定义到配置文件中才是最好的设计方式。
利用 ServiceBehavior与OperationBehavior可以控制服务的如下属性:
1、对象实例的生命周期;
2、并发与异步处理;
3、配置行为;
4、事务行为;
5、 序列化行为;
6、元数据转换;
7、会话的生命周期;
8、地址过滤以及消息头的处理;
9、模拟 (Impersonation);
例如,通过ServiceBehavior设置对象实例的生命周期:
<behaviors> |