从零开始学WCF(3) --配置服务
配置服务概述
- 在设计和实现服务协定后,即可配置服务。在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到
- 服务的地址。
- 服务用于发送和接受消息的传输。(http还是tcp)
- 消息编码(全文本格式还是优化格式)
- 服务需要的安全类型。
- 配置服务的类型
- 使用配置文件配置
- 在代码中强制配置
- 实际上, 编写配置是WCF应用程序编程的主要部分。
-
使用配置文件配置WCF服务
- 通过使用配置文件配置WCF服务,可提供在部署时而非设计时提供终结点和服务行为数据的灵活性。
- 可使用.net framework配置技术对WCF服务进行配置。通常情况下,向承载WCF服务的internet信息服务(IIS)网站的web.config文件添加XML元素,通过这些元素,可以逐台计算机更改详细,例如终结点地址(用于与服务进行通信的实际地址)。此外,WCF包括几个系统提供的元素,可用于快速的选择服务的最基本功能。
- WCF使用.net framework的system.configuration配置系统。
- 使用IIS来承载服务--使用web.config文件。
- 使用任何其他宿主环境--使用App.config文件指定设置。
Service元素
- 每个服务都具有以下属性:
- name。指定提供服务协定的实现的类型。这是完全限定名称(命名空间的类型名称)。
- behaviorCofigurtion。指定一个正在behaviors元素中找到的behavior元素的名称。指定的行为控制操作,例如服务是否允许模拟。
endpoint元素
- 每个终结点都需要以下属性表示的地址,绑定和协定:
- address。指定服务的统一资源标示符(URI),它可以是一个绝对地址,或是一个相对于服务基址给定的地址。如果设置为空字符串,则指示在创建服务的ServiceHost时,终结点在指定的基址上可用。
- binding。通常,指定一个类似WsHttpBinding的系统提供的绑定,但也可以指定一个用户定义的绑定。指定的绑定确定传输协议类型,安全和使用的编码,以及是否支持或启用可靠会话,事务或流。
- bindingConfiguration。如果必须修改绑定的默认值,则可通过在bindings元素中配置相应的binding元素来执行此操作。此属性应赋予与用于更改默认值得binding元素的name属性相同的值。
- contract。指定定义协定的接口,这是在由service 元素的name属性指定的公共语言运行库(CLR)类型中实现的接口。
终结点地址的定义:
终结点地址的定义由EndPointAddress类表示,该类包含一个表示服务地址的统一资源定位符(URI)
- 大多数传输的地址URI包含四个部分。例如:"http://www.fabrikam.com:322/mathservice.svc/secureEndPoint"这个URI具有以下四个部分:
- 方案:http:
- 计算机:www.fabrikam.com
- (可选)端口:322
- 路径:/mathservice.svc/secureEndPoint
元数据终结点地址
- WCF通过发布一个或多个元数据终结点来发布元数据。
- 发布服务元数据之后,可以通过标准协议(如 WS-MetadataExchange(MEX)和Http/Get请求)来使用该元数据
- 元数据终结点类似于其他终结点:它们都有一个地址,一个绑定和一个协定。并且它们都可以通过配置或使用代码添加到服务主机。
- 若要启用发布元数据终结点,必须将ServiceMetadabehavior服务行为添加到该服务,默认情况下,WCF服务不发布元数据终结点,所以必须将它们显示添加到服务才能为服务启用元数据发布。
绑定
- 绑定是用于指定连接到WCF服务终结点所必须的通信详细信息的对象。WCF中每个终结点都要求正确指定绑定。
- 绑定最起码必需指定要使用的传输(如Http或TCP)。还可以通过绑定来设置其他特征,如安全和事务支持。
- 绑定中的信息可能非常基本,也可能非常复杂,最基本的绑定仅指定必需用于连接到终结点的信息属于以下类别中的一种。
- 协议:确定要使用的安全机制:可靠消息传递功能或事务上下文流设置。
- 编码:确定消息编码(例如:文本或二进制)
- 传输:确定要使用的基础传输协议(例如TCP或HTTP)
- 绑定中的信息可能十分复杂,而且某些设置可能和其他设置不兼容。因此WCF包含一组系统提供的绑定。这些绑定旨在满足大多数应用程序要求。下面的类表示系统提供的一些绑定的示例:
- BasicHttpBinding:一个Http协议绑定,适用于连接到符合WS-I基本配置文件规范的web服务(例如基于ASP.NET Web服务的服务 安全性差)。
- WSHttpBinding:一个可互操作的Binding,适用于连接到符合WS-*的协议的终结点。(安全性高)
- NetNamedPipeBinding:使用.net framework连接到同一计算机上的其他WCF的终结点(性能高)
- NetMsmqBinding:使用.net framework创建与其他WCF终结点的排队消息连接。()
- 使用自己的绑定
如果系统提供的绑定都不具有服务应用程序所需的正确功能组合,则可以创建自己的绑定。有两种方法可以实现此目的:
- 可以使用CustomBinding对象从预先存在的绑定元素创建新的绑定
- 也可以通过Binding派生来创建完全由用户定义的Binding。
使用绑定:
使用绑定需要实现两个步骤:
- 选择或定义绑定。最简单的方法就是选择WCF包含的系统提供的绑定中的一个,并且通过该绑定的默认设置来使用它。
- 创建一个使用所选择或定义的绑定的终结点。
代码和配置:可以通过代码或配置来实现绑定
- 这两种方法与您使用的是系统提供的绑定还是系统提供的绑定还是自定义的绑定无关。通常使用代码可以使在设计时对绑定的定义拥有完全的控制。
- 另一方面使用,使用配置可以灵活修改,不用编译。
- 代码中定义的绑定是在系统配置之后创建的,这使得代码定义的绑定可以覆盖配置中定义的任何绑定。