一遇到配置文件的问题,头就大,因为根本就看不懂配置文件。其实这个观点是错误的,只要我们有了WCF的基础,配置文件完全不是问题。
这次,带领大家认识WCF配置文件。
一、WCF配置文件基本结构
<?xml version="1.0"encoding="utf-8"?>
<configuration>
<system.serviceModel>
<!--配置服务和终结点开始-->
<!-- services 元素包含应用中驻留的所有service的配置要求 -->
<services>
<!--配置某一服务,在这里可以指定服务名称-->
<service name=”命名空间.类型名” behaviorConfiguration="behavior名">
<endpoint address="URI" binding="wsHttpBinding" contract="Contract全限定名" bindingConfiguration="binding名" name=""/>
</service>
</services>
<!--配置服务和终结点结束-->
<!--配置绑定节点开始-->
<bindings>
<wsHttpBinding>
<binding name="binding名"/>
</WsHttpBinding>
</bindings>
<!--配置绑定节点结束-->
<!--配置service和Endpiont行为开始-->
<behaviors>
<serviceBehaviors>
<behavior>
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置行为结束-->
<!--定义客户端的配置-->
<client>
<endpoint address="URI" binding="wsHttpBinding" bindingConfiguration="binding名" contract="Contract全限定名" name="endpoint配置名"/>
</client>
</system.serviceModel>
</configuration>
二、配置节点详细介绍
1、<services>节点
示例:
<services>
<service name="ITOO.ExamEvalPaper.Service.WCFService.ExamEvalPaperService" behaviorConfiguration="ExamEvalPaper">
<endpoint address ="" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding_Default" contract="ITOO.ExamEvalPaper.Contracts.IExamEvalPaperService" />
</service>
</services>
<service>
节点包含name
和behaviorConfiguration属性。其中,name配置了实现Service Contract的类型名。类型名必须是完整地包含了命名空间和类型名。
如图:
behaviorConfiguration的配置值与其后的<behaviors>配置节的内容有关:
<behaviors>
<serviceBehaviors>
<behavior name="ExamEvalPaper">
<!—ServiceMetadataBehavior表示WCF服务可以对外公布元数据(Metadata)-->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebugincludeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<endpoint>是<service>配置节点的主体,其中,<endpoint>节点包含了endpoint的三个组成部分ABC,即Address、Binding和Contract。由于具体的 binding配置是在<bindings>节点中完成,因而,在<endpoint>中配置了bindingConfiguration属性,指向具体的binding配置。
<bindings>
<wsHttpBinding>
<binding name="WsHttpBinding_Default" transactionFlow="true" closeTimeout="00:10:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" useDefaultWebProxy="false"/>
</wsHttpBinding>
</bindings>
2、<Bindings>节点
指定一个或多个系统预定义的binding,也可以指定自定义的customBinding。大家有没有发现在3.0中用到的binding是basicHttpBinding,而在3.1用到的是wsHttpBinding。
那么,我们来看一下binding都有什么?
绑定 | 配置元素 | 说明 | ||
BasicHttpBinding | <basicHttpBinding> | 一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 | ||
WSHttpBinding | <wsHttpBinding> |
| ||
WSDualHttpBinding |
| 一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 | ||
WSFederationHttpBinding | <wsFederationHttpBinding> | 一个支持 WS-Federation 协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。 | ||
NetTcpBinding |
| 一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 | ||
NetNamedPipeBinding | <netNamedPipeBinding> | 一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 | ||
NetMsmqBinding | <netMsmqBinding> | 一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。 | ||
NetPeerTcpBinding
|
| 一个支持多计算机安全通信的绑定。 | ||
MsmqIntegrationBinding | <msmqIntegrationBinding> | 一个适合于 WCF 应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。 | ||
BasicHttpContextBinding | <basicHttpContextBinding> | 一个绑定,适用于与符合 WS-Basic Profile 且允许使用 HTTP Cookie 交换上下文的 Web 服务进行的通信。 |
现在大家是不是感觉WCF配置文件很简单啦!