WCF编程系列(四)配置文件
WCF编程系列(四)配置文件
.NET应用程序的配置文件
前述示例中Host项目中的App.config以及Client项目中的App.config称为应用程序配置文件,通过该文件配置可控制程序的运行时 行为,相对于在设计时通过程序来设定运行时行为,配置文件具有更高的灵活性:我们无需重新编译程序即可修改应用程序行为。编译器最终会将 App.config编译成 [应用程序名称].exe.config 文件,并放在当前应用程序目录中。而对应Web应用程序(ASP.NET)其对应的配置文件为Web.config。
.NET存在一个默认的全局配置文件Machine.config,通常位于相应.Net Framework运行库目录下的Config目录中,如:C:\Windows\Microsoft.NET\Framework \v2.0.50727\CONFIG。.NET应用程序启动时,会将应用程序下的App.config与Machine.config合并 (App.config的配置会覆盖Machine.config配置)。
.NET配置文件是一个标准的XML文件,根节点为<configuration>,在该节点下包含多个.NET的配置节点
<?xml version="1.0" encoding="utf-8"?>
<configuration>
......
</configuration>
WCF配置文件结构
WCF配置位于应用程序配置文件中的<system.serviceModel>节点下,其主要内容如下:
<system.ServiceModel>
<services>
<service>
<endpoint/>
</service>
</services>
<bindings>
<binding>
</binding>
</bindings>
<behaviors>
<behavior>
</behavior>
</behaviors>
<client>
<endpoint/>
</client>
</system.ServiceModel>
<services>节点
该节点下包含应用程序承载的所有服务规范,由多个<service>节点组成。
<service>节点
一个<service>定义一个服务,该节点包含两个属性:name,指定提供服务契约实现的类型,是一个完全限定名称(即包括命名空间和类 型名称),如示例一中指定的Xfrog.Study.WCF.FirstService;behaviorConfiguration,指定服务的行为控 制配置名称,该名称和<behaviors>下<behavior>节点的name属性对应,如示例一中的 behaviorConfiguration。
<endpoint>节点
<service>节点下可包含多个<endpoint>节点,每个节点包含以下属性,用以指定终结点的地址、绑定及契约:
address属性,一个URI用以指定服务的地址,它可以是相对地址也可以是绝对地址,如果指定的是相对地址,其基地址取<service><host><baseAddresses>下定义的地址,如示例一中的定义。
binding属性,指定一个绑定,通常是WCF中预定义绑定,当然也可以指定一个自定义的绑定。
contract属性,指定一个契约,通常为通过ServiceContract特性定义的接口或类型,同样是一个完全限定名称,如示例一中的Xfrog.Study.WCF.IFirstService。
bindingConfiguration属性,如果需要修改绑定的默认行为,则需要在bindings节点下,预定义绑定对应的绑定配置节点(参见 【WCF编程系列(三)】中的预定义绑定列表)下的<binding>节点来指定,该节点的name属性和此处 bindingConfiguration属性对应,如示例一中Client项目中的绑定:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IFirstService" ....>
....
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IFirstService" contract="IFirstService"
name="BasicHttpBinding_IFirstService" />
</client>
</system.serviceModel>
</configuration>
<endpoint>中bindingConfigration设置为BasicHttpBinding_IFirstService,对应于<bindings><basicHttpBinding><binding name="BasicHttpBinding_IFirstService"….>中的定义,而<basicHttpBinding>配置节点对应的是basicHttpBinding预定义绑定。
<client>节点
该节点用于客户端的配置,在该节点下指定客户端需调用的终结点定义。
使用WCF配置编辑器
前面示例中我们都是通过手动输入的配置内容,实际上Visual Studio 2008 为我们提供了一个WCF配置编辑器,在VS中选择工具菜单—>WCF服务配置编辑器可启动它,如果项目中已经存在App.config文件,则可直 接在该文件上单击右键,选择编辑WCF配置来启动编辑器。
WCF编程系列(四)配置文件的更多相关文章
- WCF编程系列(六)以编程方式配置终结点
WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来 ...
- WCF编程系列(五)元数据
WCF编程系列(五)元数据 示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...
- WCF编程系列(二)了解WCF
WCF编程系列(二)了解WCF 面向服务 服务是复用进化的结果,起初的复用是函数,面向对象编程的出现使复用从函数上升到对象,随后面向组件编程又将复用从对象上升到组件,现在面向服务编程将复用 ...
- WCF编程系列(三)地址与绑定
WCF编程系列(三)地址与绑定 地址 地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://loc ...
- WCF编程系列(一)初识WCF
WCF编程系列(一)初识WCF Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程模型.WCF的基本概念: 地址:定义服务的 ...
- WCF编程系列(七)信道及信道工厂
WCF编程系列(七)信道及信道工厂 信道及信道栈 前面已经提及过,WCF中客户端与服务端的交互都是通过消息来进行的.消息从客户端传送到服务端会经过多个处理动作,在WCF编程模型中,这些动作是按层 ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
- 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 学习ASP.NET Core Blazor编程系列四——迁移
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
随机推荐
- Java中finalize方法用途何在?
package thinking.in.java.demo; /* * finalize的用途何在? * *本例的终止条件是L所有的Book对象在被当做垃圾回收前都应该被签入.但是在main方法中 * ...
- python 继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- 爬去知乎百万用户信息之UserTask
UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 ...
- 似曾相识的 RecyclerView
一.常用方法 RecyclerView 与 ListView.GridView 类似,都是可以显示同一种类型 View 的集合的控件. 首先看看最简单的用法,四步走: ①接入 build.gradle ...
- eclipse jetty启动内存溢出
一.eclipse jetty启动内存溢出, 异常信息 Exception in thread "ConfigClientWorker-Default" java.lang.Out ...
- XMPP——Smack[4]状态,心情,头像更改
呵呵,三天时间,看的不是很深入,欢迎大家补充呀 修改自身状态 包括上线,隐身,对某人隐身,对某人上线 public static void updateStateToAvailable(XMPPCon ...
- error: variable '__this_module' has initializer but incomplete type错误解决
版权所有,转载必须说明转自 http://my.csdn.net/weiqing1981127 原创作者:南京邮电大学 通信与信息系统专业 研二 魏清 问题描述:使用SAM9X25 内核版本是2. ...
- linux内核编译步骤
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- SmoothProgressBar
https://github.com/castorflex/SmoothProgressBar
- leetcode第一刷_Jump Game
这个题事实上非常easy的,我一開始想复杂了,它没要求记录路径,事实上仅仅要看一下每一步之后所能延伸到的最远的位置就能够了,在这一个最远位置前面的那些位置,都是能够到达的,假设扫到了某个i,它大于当前 ...