WCF系列教程之WCF服务配置
文本参考自:http://www.cnblogs.com/wangweimutou/p/4365260.html
简介:WCF作为分布式开发的基础框架,在定义服务以及消费服务的客户端时可以通过配置文件的方式,来进行设置,这充分的体现了WCF的伸缩性和自定义性。当然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期程序的更改和扩展。
一、WCF配置文件结构如下图所示,包含三个部分,services(服务)、bindings(绑定)、behaviors(行为)
二、Services节点
每个服务发布都会包含一个Service节点,里面包含一个或者多个endpoint节点,Service元素具有以下属性:
1、name属性:设置提供实现服务契约接口的类型,它是完全限定名称(命名空间和类型)->命名空间.类名
2、behaviorConfiguration属性:为当前服务节点绑定服务行为元素,对应的behaviors里面的节点为serviceBehaviors节点。
3、host节点:配置服务主机,该节点的属性如下:
(1)、baseAddresses节点:通过该节点配置服务主机的基地址
4、endpoint节点:该节点指定用于公开服务的终结点的绑定、协定和地址属性,与WCF的所有通信是通过该服务的终结点进行的,利用终结点,WCF服务可以访问WCF提供的功能。该节点的属性如下:
(1)、address: 一个包含终结点地址的字符串,指定服务元素的统一标识符(URI)。 可以将地址指定为绝对地址或相对地址。 如果提供的是相对地址,则需要主机提供适合于绑定中所使用的传输方案的基址。 如果未配置地址,则假定基址为该终结点的地址。默认值为一个空字符串。
(2)、binding:设置与终结点的通信的通信方式,通信方式分为两种,一种是系统提供的绑定类型,另一种是用户自定义的绑定类型。指定的绑定确定传输协议的类型、安全和使用编码,以及是否支持或启用可靠会话、事务或流。
(3)、bindingConfiguration:一个字符串,指定实例化终结点时所使用的绑定的绑定名称。 定义终结点时,绑定名称必须在作用域内。如上图中采用的是wsHttpBinding,则bindingConfiguration的名称对应bindings下的wsHttpBinding里的名称为myBinding的绑定。
(4)、behaviorConfiguration:指定在behaviors元素中找到的终结点行为元素的名称,对应的behaviors里面的节点为endpointBehaviors节点.
(5)、Contract:设置此终结点公开了哪个接口协定。 程序集必须实现该协定类型。 如果服务实现所实现的是单个协定类型,则可以省略此属性。 默认值为一个空字符串。
(6)、元数据终结点:WCF服务通过发布一个的或者多个元数据终结点来发布元数据。发布元数据后可以通过标准协议(如WS-MetadataExchange(MEX)和Http/Get请求)来使用该元数据。元数据终结点类似于其他服务终结点,他们都需要第一个地址、一个协定、一个绑定。若要启用发布元数据终结点,必须将ServiceMetadataBehavior服务行为添加到该服务。默认情况下,WCF服务不发布元数据终结点,所以必须将他们显示的添加到服务配置中才能为服务启用元数据发布。
WCF服务元数据是WCF服务的核心部分的服务地址(adress)、绑定(通信协议bindings)、契约(服务、操作、数据Contract)的原始描述信息。服务所公开的元数据包括XSD(文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值)和 WSDL 文档(用于描述服务的方法、参数、参数个数、顺序、返回值、返回值的类型等方法的相关信息).Disco文档(描述服务的协议、地址、命名空间等信息).
这些关键的WCF服务元数据全都是基于XML语言描述,支持核心的行业标准协议.。XSD好处显而易见, 基于XML,没有专门的语法,XML Schema支持一系列的数据类型(int、float、Boolean、date等),可扩充的数据模型,支持综合命名空间,支持属性组等.而这些正式WCF分布式服务追求的跨语言、跨平台的关键部分所在。
暴露WCF元数据的原因:
描述了WCF服务元数据的作用后,就能推测出为什么暴露WCF服务元数据的原因.WCF服务元数据描述服务的核心信息,客户端需要了解这些特征以便与该服务进行通信。要想实现异构平台或者系统之间的通信,以前的技术是使用Web Service.因为其具有自描述、可扩展、与平台无关等优势。客户端只需要根据Web Service地址,便可获取服务的相关信息,反序列话本地的代码,通过服务代理进行服务的调用。WCF服务主要特性之一就是跨平台的服务交互。而暴露服务元数据的重要原因就是解决了异构客户端服务交互的关键问题。 元数据基于XML,自描述。客户端可以根据服务的元数据反序列换生成本地代码,无论是c#,vb还是java语。
5、bindings节点
配置绑定所需要的节点属性,绑定用于连接WCF服务终结点所需要的详细信息,所以每个终结点必须正确配置绑定信息,绑定最起码需要指定使用的传输机制(HTTP/TCP),还可以设置其他特征,如安全和事务支持。绑定信息可能很复杂,也可能很简单,一般来说绑定包含的如何连接到终结点的信息属于以下类别中的一种:
(1)、协议:确定使用的安全机制,可靠消息传递或事务上下文流设置
(2)、编码:确定消息编码(文本或者二进制)
(3)、传输:确定使用的基础传输协议(如TCP/HTTP)
6、behavios
包含serviceBehaviors(服务行为)、endpointBehaviors(终结点行为)的配置.
(1)、serviceBehaviors节点
(2)、endpointBehaviors节点
具体参照MSDN
https://msdn.microsoft.com/zh-cn/library/aa967282(v=vs.110).aspx
https://msdn.microsoft.com/zh-cn/library/vstudio/ms731403(v=vs.100).aspx