上篇文章中对WCF的配置放到App.config中,这样可以使程序更灵活、更具有扩展性。

下面说下配置文件中各个节点的含义。

服务端:

WCF配置文件节点放在<system.serviceModel></system.serviceModel>之间。是<configuration>的子节点

服务端的信息放到<services></services>节点之间。<services>是<system.serviceModel>的子节点。

<services>可以配置多个服务,每个服务用<service></service>来配置。<service>节点属性"name"表示服务中指定的实现类,要用命名空间+类名的方式赋值。

“behaviorConfiguration”属性表示服务的行为,这个值要跟<serviceBehaviors>中子节点的值一致(后面会有说明)。

 <service name="WCFService.Calculate" behaviorConfiguration="metadataBehavior" >

地址是WCF中三要素之一,所以要配置地址。配置地址的节点是<baseAddresses>,做为<host>的子节点。这里的地址是一个基地址。

 <host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:9999/Calculate"/>
</baseAddresses>
</host>

服务部分配置完成,继续配置终结点。终结点用<endpoint>表示。<endpoint>也是<service>的子节点。

<endpoint>的属性“address”表示相对地址。相对地址和基地址组在一起,形成基地址/相对地址的形式,成为终结点的完整地址。相对地址也可以指定为""(空字符串),这样相对地址就跟基地址是一个地址。相对地址还可以指定为绝对地址,这样就可以覆盖基地址,使基地址不起作用。“binding”属性表示绑定的服务协议。“contract”表示定义的服务契约,使用命名空间+服务契约名称的方式赋值。

如果需要相对地址赋值的话,使用命名空间+实现契约接口的类名形式赋值。不推荐绝对地址,因为灵活性不强。

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>这句话表示元数据交换终结点的配置。因为WCF交换数据是通过元数据进行交换。

服务属性完整配置如下:

<services>
<service name="WCFService.Calculate" behaviorConfiguration="metadataBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:9999/Calculate"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="WCFService.ICalculate"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>

配置完服务属性,就该配置服务的行为了。行为可以被不同的服务引用,所以,是单独的。

表示服务行为的节点是<behaviors>,跟<services>是兄弟节点。因为带s,所以,也是可以添加多个行为的。

<serviceBehaviors>表示这个是服务行为,是服务行为的名字。如果不指定name属性,所有服务都使用这个行为。指定name属性,则只有指定的服务使用这个行为。

<serviceMetadata>表示交换元数据。httpGetEnabled="true"表示可以使用get请求方式。

行为配置代码:

 <behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>

这样一个完整的服务端配置就完成了。

服务端完整的配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<services>
<service name="WCFService.Calculate" behaviorConfiguration="metadataBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:9999/Calculate"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="WCFService.ICalculate"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

客户端配置

客户端配置比服务端要简单,在引用节点上,右键单击,选择“添加服务引用”,VS会自动生成配置文件。

客户端配置文件跟服务端配置文件差不多。服务端的配置理解后,看客户端的配置会感觉很容易理解。

客户端的配置也要放入<system.serviceModel></system.serviceModel>之间。

首先是协议的绑定:

<bindings> </bindings> 节点表示的是客户端和服务端通信使用的协议绑定。这个协议要跟服务端和客户端一致。

<wsHttpBinding></wsHttpBinding>表示这是一个wsHttpBinding类型的通信协议。
<binding>节点的name属性表示这个协议的名字,用来标识客户端endpoint用的是哪一个协议。

协议绑定配置:

<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculate" />
</wsHttpBinding>
</bindings>

绑定完毕协议该进行客户端endpoint的配置了。

<client></client>节点表示这是一个客户端节点。

<endpoint>节点中address属性使用服务端公布出来的地址。binding属性表示终结点使用的协议类型。bindingConfiguration属性跟<bindings>中<binding>节点name属性相同,表明使用的是哪一个节点。contract表示使用的契约,使用命名空间+契约名称的形式赋值。name属性,表示这个endpoint节点的名称是什么,在使用ChannelFactory创建通道时候,使用这个属性。

<identity>表示这个配置文件的使用角色。

<client>
<endpoint address="http://127.0.0.1:9999/Calculate" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculate" contract="WCFReference.ICalculate"
name="WSHttpBinding_ICalculate">
<identity>
<userPrincipalName value="SUN-PC\Administrator" />
</identity>
</endpoint>
</client>

  

系统自动生成的完整客户端配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculate" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1:9999/Calculate" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculate" contract="WCFReference.ICalculate"
name="WSHttpBinding_ICalculate">
<identity>
<userPrincipalName value="SUN-PC\Administrator" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

  

WCF(二)配置文件的更多相关文章

  1. WCF中配置文件解析

    WCF中配置文件解析[1] 2014-06-14 WCF中配置文件解析 参考 WCF中配置文件解析 返回 在WCF Service Configuration Editor的使用中,我们通过配置工具自 ...

  2. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  3. WCF入门二[WCF的配置文件]

    一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...

  4. WCF(二) 使用配置文件实现WCF应用程序

    服务三要素ABCA:Address 在哪里 (包含传输方式的信息)B:Binding 怎么实现(与地址的传输方式要匹配)C:Contract做什么(服务契约) namespace WCFService ...

  5. WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...

  6. 自定义WCF的配置文件

    原文地址:http://www.cnblogs.com/shanyou/archive/2008/12/02/1346298.html WCF的承载既可以通过编码实现,也能够通过配置实现.而且使用配置 ...

  7. 无废话WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...

  8. 四、WCF的配置文件

    注:本文为学习摘抄,原文地址:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/02/2710224.html 一.概述 配置也是WCF编程中的主 ...

  9. 【转】WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...

  10. Wcf 之 配置文件解析

    在WCF Service Configuration Editor的使用中,我们通过配置工具自动生成了WCF服务端的config文件.现在我们来看下这个配置文件各个标签的意义(解释在下面xml文件中的 ...

随机推荐

  1. 数据库_数据分片与mycat服务

    1.数据分片; 2.部署mycat服务;3.基于mycat服务创建新库新表. 一,数据分片 1.数据分片,也叫分库分表,即将存放在一台数据库服务器中的数据,按照特定方式进行拆分,分散存放到其它多台服务 ...

  2. 为my_string类创建复制构造函数copy constructor ,拷贝函数名和类同名

    为下面的my_string类创建一个复制构造函数,并将定义该类的代码提交. my_string类的定义: class my_string { char *s; public: my_string(ch ...

  3. IDEA 社区版 点击‘Edit Configurations’打开“Run/Debug Configurations”,里面没有tomcat server选项

    没错 社区版就是没有 “先手动添加Plugins 然后再setting” 方法无效 搜索不到 http://blog.csdn.net/u010666884/article/details/52119 ...

  4. UGUI实现打字的效果

    创建打字特效控制的脚本,将该脚本挂载都含有Text组件的对象上面,通过该脚本控制Text文本框的文字,以打字的效果显示文字. 脚本 using UnityEngine; using System.Co ...

  5. Windows GUI程序自动化之pywinauto

    一. pywinauto知识点总结 官方英文版文档网址:https://pywinauto.readthedocs.io/en/latest/index.html 1.1 pywinauto的安装与配 ...

  6. Innodb性能优化之参数设置

    现在,Innodb是Mysql最多使用的存储引擎.其性能一直广受关注.本文通过基本的参数设置来提高其性能. innodb_buffer_pool_size 缓冲池大小.这是innodb参数中最重要的设 ...

  7. Mysql 索引-1

    索引的类型 根据数据库的功能,可以在数据库设计器中创建四种索引:唯一索引.非唯一索引.主键索引和聚集索引. 索引的不同应用场景 场景 1. 当数据多且字段值有相同的值得时候用普通索引. 2. 当字段多 ...

  8. nyoj19(排列组合next_permutation(s.begin(),s.end()))

    题目意思: 从n个数中选择m个数,按字典序输出其排列. pid=19">http://acm.nyist.net/JudgeOnline/problem.php?pid=19 例: 输 ...

  9. 4418: [Shoi2013]扇形面积并|二分答案|树状数组

    为何感觉SHOI的题好水. ..又是一道SB题 从左到右枚举每个区间,遇到一个扇形的左区间就+1.遇到右区间就-1,然后再树状数组上2分答案,还是不会码log的.. SHOI2013似乎另一道题发牌也 ...

  10. DOMContentLoaded事件<zz>

    今天查看百度空间源代码,发现多了个util.js文件,打开看看.里面里面定义了addDOMLoadEvent.这是干什么用的? 仔细查看代码,发现在Mozilla添加了DOMContentLoaded ...