WCF入门教程(五)配置文件

WCF入门教程(五)配置文件


服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用。

承载服务有两种方式,一种通过配置文件,一种通过代码进行配置。上一章已经介绍了代码方式来架设服务。

当然配置文件的方式还是很灵活,应用广泛。

通过此文章具体介绍WCF如果通过配置文件的方式进行配置。

一、配置文件功能

需要配置服务的EndPoint,设置相关绑定协议以及服务协定,并且还可以限定其具体的行为等。

二、配置文件结构

主要配置内容包括service节点、binding和behavior节点,还有其他的一些节点这里暂时不展开讨论。


<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<!--配置服务节点Start-->
<services>
<!--配置某一服务,在这里可以指定服务名称-->
<service name="SecondWCFSample.Service1">
</service>
</services>
<!--配置服务节点End-->

<!--配置绑定节点Start-->
<bindings>
<basicHttpBinding></basicHttpBinding>
<mexHttpBinding></mexHttpBinding>
<wsHttpBinding></wsHttpBinding>
</bindings>
<!--配置绑定节点End-->

<!--配置行为节点Start-->
<behaviors>
<serviceBehaviors>
<behavior>
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置行为节点End-->

<!--路由设置Start-->
<routing>
<filters>
<filter name="filter1" filterType="Action"/>
</filters>
</routing>
<!--路由设置End-->

</system.serviceModel>

</configuration>

三、具体配置说明


1、Service节点


属性说明:

name -
指定这个service配置是针对的那个服务,为一个实现了某些Contract的服务类的完全限定名(名称空间.类型名),ServiceHost载入一个服务后,会到配置文件中的<services>下找有没有name属性跟服务匹配的<service>的配置

behaviorConfiguration -
指定在<serviceBehaviors>下的一个<behavior>的name,这个特定<behavior>给这个service制定了一些行为,比如服务是否允许身份模拟-->

案例:

<!--属性设置,name:服务的完全限定名,命名空间+实现类名;behaviorConfiguration行为配置,取设置的behavior的名称,具体可见behaviors节点-->
<service name="SecondWCFSample.Service1" behaviorConfiguration="basicBehavior">
</service>

2、Endpoint节点


定义endpoint,指定三个要素ABC,地址(Address),绑定(Binding)以及协定(Contract)。

案例:


        <!--定义endpoint,指定地址(address),绑定(binding)以及协定(contract)-->
<!-- 属性说明:
address - 服务端地址,相对于baseAddress的相对地址,如果为空则为baseAddress,也可以设定为绝对地址
binding - 绑定协议,系统的某一协议,basicHttpBinding,mexHttpBinding,wsHttpBinding等
contract - 协议完全限定名(名称空间.类型名)
name - 客户端代理类的构造方法中的endpointConfigurationName对应到这个name
bindingConfiguration - 指定客户端binding的具体设置,指向<bindings>元素下同类型binding的name -->
<endpoint address ="" binding="wsHttpBinding" contract="SecondWCFSample.IService1">
<!--服务标识。 部署时,应删除或替换下列标识元素,以反映用来运行所部署服务的标识。删除之后,WCF将自动推断相应标识。-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>

3、Binding


绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点。

绑定包含以下元素:

    • 协议堆栈确定用于发送到终结点的消息的安全性、可靠性和上下文流设置。

    • 传输确定将消息发送到终结点时使用的基础传输协议,例如 TCP 或
      HTTP。

    • 编码确定用于发送到终结点的消息的网络编码,例如,文本/XML、二进制或消息传输优化机制
      (MTOM)。

具体的binding,功能不同,设置的属性不同,具体参照以下


























































绑定 配置元素 说明

BasicHttpBinding

<basicHttpBinding>

一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX)
的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。

WSHttpBinding

<wsHttpBinding>

一个安全且可互操作的绑定,适合于非双工服务约定。

WSDualHttpBinding

<wsDualHttpBinding>

一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。

WSFederationHttpBinding

<wsFederationHttpBinding>

一个支持 WS-Federation
协议的安全的、可互操作的绑定,使联盟中的组织可以高效地对用户进行身份验证和授权。

NetTcpBinding

<netTcpBinding>

一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。

NetNamedPipeBinding

<netNamedPipeBinding>

一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。

NetMsmqBinding

<netMsmqBinding>

一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。

NetPeerTcpBinding

<netPeerTcpBinding>

一个支持多计算机安全通信的绑定。

MsmqIntegrationBinding

<msmqIntegrationBinding>

一个适合于 WCF 应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。

BasicHttpContextBinding

<basicHttpContextBinding>

一个绑定,适用于与符合 WS-Basic Profile 且允许使用 HTTP Cookie 交换上下文的 Web
服务进行的通信。

NetTcpContextBinding

<netTcpContextBinding>

一个安全且经过优化的绑定,适用于允许使用 SOAP 标头交换上下文的 WCF 应用程序之间跨计算机的通信。

WebHttpBinding

<webHttpBinding>

一个绑定,可用于为通过 HTTP 请求(而不是 SOAP 消息)公开的 WCF Web 服务配置终结点。

WSHttpContextBinding

<wsHttpContextBinding>

一个安全且可互操作的绑定,适用于允许使用 SOAP
标头交换上下文的非双工服务协定。


 案例:


    <!--配置绑定节点Start-->
<bindings>
<basicHttpBinding>
<binding name="basic" transferMode="Streamed" messageEncoding="Text" allowCookies="false" textEncoding=""></binding>
</basicHttpBinding>
<netTcpBinding>
</netTcpBinding>
<customBinding>
</customBinding>
</bindings>
<!--配置绑定节点End-->

4、Behavior节点


behavior设置服务的运行时行为,比如:是否允许客户端获得服务的元数据、路由修改、操作访问权限设置、服务的限制机制、服务请求的超时时间等。

Behavior的具体含义可见:

WCF入门教程(一)简介

http://www.cnblogs.com/yank/p/3653160.html

案例:


    <!--配置行为节点Start-->
<behaviors>
<serviceBehaviors>
<behavior name="basicBehavior">
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置行为节点End-->

具体子节点功能介绍如下:















































元素 说明

<dataContractSerializer>

包含 DataContractSerializer 的配置数据。

<persistenceProvider>

指定要使用的持久性提供程序实现的类型以及用于持久性操作的超时值。

<serviceBehavior>
的 <routingExtension>

提供对路由服务的运行时访问以允许对路由配置进行动态修改。

<serviceAuthentication>

提供一个工作流配置元素,该元素在服务级别建立传输、消息或发起方的有效性。

<serviceAuthorization>
元素

指定用于授予服务操作访问权限的设置。

<serviceCredentials>

指定要用于对服务进行身份验证的凭据以及与客户端凭据验证相关的设置。

<serviceDebug>

指定 Windows Communication Foundation (WCF) 服务的调试和帮助信息功能。

<serviceDiscovery>

指定服务终结点的可发现性。

<serviceMetadata>

指定服务元数据的发布和相关信息。

<serviceSecurityAudit>

指定用于在服务操作过程中启用安全事件审核的设置。

<serviceThrottling>

指定 WCF 服务的限制机制。

<serviceTimeouts>

指定服务的超时。

<workflowRuntime>

指定用于承载基于工作流的 WCF 服务的 WorkflowRuntime 实例的设置。

<useRequestHeadersForMetadataAddress>

允许从请求消息头中检索元数据地址信息。

详细可见:

http://msdn.microsoft.com/zh-cn/library/aa967282(v=vs.100).aspx

四、完整实例


<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<!--配置服务节点Start-->
<services>
<!--配置某一服务,在这里可以指定服务名称-->
<!--属性设置,name:服务的完全限定名,命名空间+实现类名;behaviorConfiguration行为配置,取设置的behavior的名称,具体可见behaviors节点-->
<service name="SecondWCFSample.Service1" behaviorConfiguration="basicBehavior">
<!--主机地址-->
<host>
<!--基址,访问某服务地址的基址-->
<baseAddresses>
<add baseAddress = "http://localhost:8732/Design_Time_Addresses/SecondWCFSample/Service1/" />
</baseAddresses>
<!--访问超时时间-->
<timeouts />
</host>
<!-- Service Endpoints -->
<!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
<!--定义endpoint,指定地址(address),绑定(binding)以及协定(contract)-->
<!-- 属性说明:
address - 服务端地址,相对于baseAddress的相对地址,如果为空则为baseAddress,也可以设定为绝对地址
binding - 绑定协议,系统的某一协议,basicHttpBinding,mexHttpBinding,wsHttpBinding等
contract - 协议完全限定名(名称空间.类型名)
name - 客户端代理类的构造方法中的endpointConfigurationName对应到这个name
bindingConfiguration - 指定客户端binding的具体设置,指向<bindings>元素下同类型binding的name -->
<endpoint address ="" binding="wsHttpBinding" contract="SecondWCFSample.IService1">
<!--服务标识。 部署时,应删除或替换下列标识元素,以反映用来运行所部署服务的标识。删除之后,WCF将自动推断相应标识。-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
<!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<!--配置服务节点End-->

<!--配置绑定节点Start-->
<bindings>
<basicHttpBinding>
<binding name="basic" transferMode="Streamed" messageEncoding="Text" allowCookies="false"></binding>
</basicHttpBinding>
<netTcpBinding>
</netTcpBinding>
<customBinding>
</customBinding>
</bindings>
<!--配置绑定节点End-->

<!--配置行为节点Start-->
<behaviors>
<serviceBehaviors>
<behavior name="basicBehavior">
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
<!---->
<serviceSecurityAudit auditLogLocation="Security"/>
<!--服务终结点的可发现性-->
<serviceDiscovery>
<announcementEndpoints>
</announcementEndpoints>
</serviceDiscovery>
<!--maxItemsInObjectGraph指定要序列化或反序列化的最大项数-->
<dataContractSerializer maxItemsInObjectGraph="1048576"/>
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置行为节点End-->

<!--路由设置Start-->
<routing>
<filters>
<filter name="filter1" filterType="Action"/>
</filters>
</routing>
<!--路由设置End-->

</system.serviceModel>

</configuration>

五、其他配置


关于其他配置项,研究比较深入的朋友可以参见MSDN详细文档

http://msdn.microsoft.com/zh-cn/library/ms731354(v=vs.100).aspx

WCF入门教程(五)配置文件,布布扣,bubuko.com

时间: 2024-09-30 06:34:09

WCF入门教程(五)配置文件的相关文章

无废话WCF入门教程五[WCF的通信模式]

一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序,如下图所示(图中的粗红线在此时代表顺序并不代表调用): 请求与答复模式为WCF的默认模式,如下代码所示: 1 [OperationContract] 2 string ShowName(string name); 即使返回值是void 也属于请求与答复模式. 缺点:

【转】WCF入门教程五[WCF的通信模式]

一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序,如下图所示(图中的粗红线在此时代表顺序并不代表调用): 请求与答复模式为WCF的默认模式,如下代码所示: 1 [OperationContract] 2 string ShowName(string name); 即使返回值是void 也属于请求与答复模式. 缺点:

【转】WCF入门教程六[一个简单的Demo]

一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体"实现"写在"Service端",而"调用"放在了"Client端".觉得有帮助别忘了点个赞哈,

无废话WCF入门教程六[一个简单的Demo]

wcf技术交流,同学习,同进步. 群号:89718412 一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体“实现”写在“Service端”,而“调用”放在了“Client端”.觉得有帮助别忘了点个赞哈,谢谢哦~ 二

WCF入门教程(二)从零做起

通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值等信息 通过ServiceContract.OperationContract.DataContract.DataMember等属性参数,将服务.操作.数据结构定义清楚. 在这里我们还清晰看到,WCF服务传输数据类型不只是通用数据类型,而且还可以传输自定义的复杂类型.哪些字段要进行传输,都可以通过D

WCF入门教程(二)从零做起-创建WCF服务

通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值等信息 通过ServiceContract.OperationContract.DataContract.DataMember等属性参数,将服务.操作.数据结构定义清楚. 在这里我们还清晰看到,WCF服务传输数据类型不只是通用数据类型,而且还可以传输自定义的复杂类型.哪些字段要进行传输,都可以通过D

WCF入门教程

无废话WCF入门教程一[什么是WCF] wcf问题有问必答,欢迎加群: 一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterpris

WCF入门教程(三)属性标签

属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义.如果已经有所了解,请直接PASS. 1.ServiceContract(服务协定) 全名:System.ServiceModel.ServiceContractAttribute 功能:指示接口或类在应用程序中定义服务协定. 简单一句话:标识此接口是否是服务协定,是否需要公开为服务. 详细:使用接口(或类)上的 Se

WCF入门教程(vs2010)

这几天挺别人提起WCF,鄙人之前只知道WPF,对WCF这个东东不甚了解,经过查阅网上的资料略有所得,和大家交流一下. 首先WCF是什么? Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口.官方的定义就是这些,我们需要知道的就是他是一个通讯接口,直白的说就是用于两者之间联系的工具. 这里有人能想到这和webSerivice不是一样的吗?直接看官方的一些对WCF的描述我想你就明白了. 在 .NET