WCF学习笔记1--发布使用配置文件的服务
关于WCF的入门网上资料很多,可以参考蒋金楠老师的博客http://www.cnblogs.com/artech/archive/2007/02/26/656901.html,我是从这篇博客开始学习的,下面会引用蒋老师博客中的代码示例。这里阶段性总结一下WCF中配置文件的使用。对服务进行寄宿时,需要配置服务的信息,一种方法是使用代码,另一种方式是使用配置文件。使用代码有助于理解,单每发布一个服务都要写一堆代码,使用配置文件可以简化代码,但初学者看到会稍微觉得复杂。好在理解WCF的原理后,我们可以使用IDE中工具进行配置,不要我们手工去写,非常方便。
前提是我已经写好了服务Services.CalculatorService,实现的契约是Contracts.ICalculator,这里写的是完全限定名。
OK。。。首先用代码实现服务的寄宿,想让外部访问到发布的服务,必须知道地址、如何通信、服务的功能及对服务的描述。
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true, HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata") };
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
}; host.Open();
Console.Read();
}
过程是这样的,首先创建了一个ServiceHost 对象,该对象指定了服务类型,然后把关于服务的信息添加到这个对象中。
1、添加终结点:host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice"); 指定了契约、绑定和地址,客户端访问服务时,基于相同的信息进行匹配。
2、添加服务行为:ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true, HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata") }; host.Description.Behaviors.Add(behavior); 指定了服务的描述性元数据的地址(HttpGetUrl) 及获取方式(HttpGetEnabled)。
运行上述代码就可以启动服务,在控制台程序停止前,服务会一直存在,所以说服务寄宿在控制台程序上。
接下来,同配置工具的把服务的信息放到配置文件,在VS2010中,打开 工具/WCF服务配置编辑器,点击文件/新建配置,在配置栏中右键点击服务节点,新建服务NewServiceType,点击NewServiceType,指定Name属性为Services.CalculatorService(指定服务类型)。
1、添加终结点:右键点击终结点,新建服务终结点,指定Address(http://127.0.0.1:9999/calculatorservice),指定Binding(wsHttpBinding),指定Contract(Contracts.ICalculator)。
2、服务行为:选择 高级/服务行为 节点,新建服务行为配置NewBehavior0,在行为元素扩展位置中添加serviceMetadata,双击serviceMetadata,指定HttpGetEnabled(True),指定HttpGetUrl(http://127.0.0.1:9999/calculatorservice/metadata)。
最后在Services.CalculatorService的属性中指定BehaviorConfiguration(NewBehavior0)。
这样就完成了服务信息的配置文件,可以看出配置的过程和写代码过程原理是一样的。通常将文件保存为App.config,并添加到宿主项目所在的目录。下面是配置文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior0">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/calculatorservice/metadata" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="NewBehavior0" name="Services.CalculatorService">
<endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding"
bindingConfiguration="" contract="Contracts.ICalculator" />
</service>
</services>
</system.serviceModel>
</configuration>
有了配置文件,代码可以简化,如下:
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
}; host.Open();
Console.Read();
}
WCF学习笔记1--发布使用配置文件的服务的更多相关文章
- WCF 学习笔记之异常处理
WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...
- WCF 学习笔记之双工实现
WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF学习笔记之传输安全
WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)
managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)
5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)
自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...
- 【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件
目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.n ...
- 【转】 Pro Android学习笔记(七六):服务(1):local和remote
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Android提供服务,服务是运行在后台的 ...
随机推荐
- How to fix updating ubuntu apt-get problem
It's my new PC with a new os of ubuntu. every time when I want to install software or update apt-get ...
- java arraylist的问题
不得不说,我犯了错,很基础的.. 遍历list的时候可以删除数组元素吗? 答案是:简单/增强for循环不可以,list.iterator()这样的方式就可以. 我之前做过类似面试题的,不过忘记了, 不 ...
- 爱上MVC~在Views的多级文件夹~续~分部页的支持
回到目录 之前写的一篇文章,主要针对View视图,它可以放在N级目录下,不必须非要在views/controller/action这种关系了,而在程序运行过程中,发现分页视图对本功能并不支持,原因很简 ...
- Android开发学习之路-Palette颜色提取工具类使用
视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...
- Lua标准库- 模块(Modules)
Lua包库为lua提供简易的加载及创建模块的方法,由require.module方法及package表组成 1.module (name [, ···]) 功能:建立一个模块. module的处理流程 ...
- Atitit cms wordpress get_post 返回的WP_Post 规范 标准化
Atitit cms wordpress get_post 返回的WP_Post 规范 标准化 public $ID; public $post_author = 0; * The post's l ...
- iOS开发中 workspace 与 static lib 工程的联合使用
在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...
- javascript类型系统——包装对象
× 目录 [1]定义 [2]生存期 [3]显式创建[4]转型函数[5]比较运算 前面的话 javascript对象是一种复合值,它是属性或已命名值的集合.通过'.'符号来引用属性值.当属性值是一个函数 ...
- Android开发之时间日期2
昨天给大家分享了一个时间和日期设置的小例子,今天发现Android的布局组件中有关于时间和日期的设置的组件,废话不多说,先给大家分享一下我的经验. 时间日期设置组件:TimePicker.DatePi ...
- 35款加速网站开发的 CSS 开发工具
网络有很很多的 CSS 工具和教程可用,它可以帮助设计人员和开发人员轻松.快速地学习 CSS 技术.这些工具中在高效开发 Web 应用程序中发挥重要作用. 在这篇文章中,我们收集了35个最好的 CSS ...