1、概述
每每在不少项目中数据库链接字符串、变量和一些动态的加载类会写在配置文件中。WCF也会在配置文件中写入一些配置参数,好比服务的地址、服务用于发送和接收消息的传输和消息编码等,经过配置文件能够灵活的修改,不须要再编译。数据库
2、终结点Endpoint
首先咱们须要了解WCF的一个概念就是终结点Endpoint,WCF服务经过定义一个或者多个终结点,当服务端和客户端的终结点相互匹配的时候才能够完成通讯。终结点Endpoint由三部分组成Address、Binding和Contract。安全
Address:直译就是地址,至关于URL,经过地址能够访问到WCF的服务。网络
Binding:直译是绑定,绑定的是客户端和服务端底层的细节,好比传输的时候使用什么编码格式xml、text、二进制等。采用tcp仍是http等等。tcp
Contract:就是契约,规定咱们那些服务接口能够访问,那些不能访问。暴露WCF服务的某些方法。ide
终结点的详细配置内容就是写在配置文件中,用于WCF实现多个应用程序之间的通讯。学习
3、WCF配置文件的组成
WCF的配置详情都在<system.serviceModel>节点下,下面是配置文件的示例,配置的节点有点多,这里主要描述<services>、<bindings>和<behaviors>这三个。更加深刻的内容能够详见MSDN文档。优化
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <behaviors> <!-- List of Behaviors --> </behaviors> <client> <!-- List of Endpoints --> </client> <diagnostics wmiProviderEnabled="false" performanceCountersEnabled="false" tracingEnabled="false"> </diagnostics> <serviceHostingEnvironment> <!-- List of entries --> </serviceHostingEnvironment> <comContracts> <!-- List of COM+ Contracts --> </comContracts> <services> <!-- List of Services --> </services> <bindings> <!-- List of Bindings --> </bindings> </system.serviceModel> </configuration>
1.<services>编码
该节点是必须有的,配置服务、接口和终结点。能够有多个service节点,每一个service节点有name(服务的具体实现,格式应为 Namespace.Class.
)和behaviorConfiguration(一个字符串,其中包含要用于实例化服务的行为(behavior)的行为名),而且能够在service节点下存在多个终结点<endpoint>。具体实例以下:spa
<services> <service name="WcfServiceLibrary1.Service1"> <host> <baseAddresses> <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" /> </baseAddresses> </host> <!-- Service Endpoints --> <!-- 除非彻底限定,不然地址将与上面提供的基址相关 --> <endpoint address="" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService1"> <!-- 部署时,应删除或替换下列标识元素,以反映 用来运行所部署服务的标识。删除以后,WCF 将 自动推断相应标识。 --> <identity> <dns value="localhost"/> </identity> </endpoint> <!-- Metadata Endpoints --> <!-- 元数据交换终结点供相应的服务用于向客户端作自我介绍。 --> <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除--> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services>
2.<bindings>code
此节包含标准绑定和自定义绑定的集合。每一项都是一个可由其惟一 name 进行标识的 binding 元素。服务经过用 name 与绑定进行连接来使用绑定。绑定包含如下元素:
- 协议堆栈肯定用于发送到终结点的消息的安全性、可靠性和上下文流设置。
- 传输肯定将消息发送到终结点时使用的基础传输协议,例如 TCP 或 HTTP。
- 编码肯定用于发送到终结点的消息的网络编码,例如,文本/XML、二进制或消息传输优化机制 (MTOM)。
由于绑定的内容节点很是多,详细的仍是看详细文档,这里只举一个实例:
<mexHttpBinding> <binding closeTimeout="TimeSpan" name="string" openTimeout="TimeSpan" receiveTimeout="TimeSpan" sendTimeout="TimeSpan"> </binding> </mexHttpBinding>
3.<behaviors>
此元素定义名为 endpointBehaviors 和 serviceBehaviors 的两个子集合。每一个集合分别定义终结点和服务所使用的行为元素。每一个行为元素由其惟一的 name 特性标识。好比:是否容许客户端得到服务的元数据、路由修改、操做访问权限设置、服务的限制机制、服务请求的超时时间等。实例以下:
<behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors>
4、其余
新建一个WCF服务程序后会有一个Web.config文件有<system.serviceModel>配置节点,当一个控制台应用程序添加该服务引用后也会有App.config文件中也会有<system.serviceModel>节点。咱们知道当服务端和客户端的终结点相互匹配的时候才能够完成通讯,可是如今咱们把服务端Web.config的<system.serviceModel>节点内容所有删除,而后将WCF应用服务程序发布到IIS上,以后仍是能够在客户端成功访问该服务。这是由于IIS在默认监听http协议,那样就能够肯定文件地址、绑定,找到了文件那接口契约什么的也都找获得了,因此这时候服务端配置文件不须要<system.serviceModel>也能够。
5、说明
这个随笔是我本身学习流程的一个记录,和你们共勉。