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提供服务,服务是运行在后台的 ...
随机推荐
- js模版引擎handlebars.js实用教程——each嵌套
<!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...
- DDD~领域事件中使用分布式事务
回到目录 对于一个聚合来说,它可能会被附加很多事件,这里我们叫它领域事务,因为一个聚会我们可以把它理解成一个领域,一个业务.对于领域事件不清楚的同学可以看看我的这篇文章<DDD~领域事件与事件总 ...
- 知方可补不足~Sqlserver中的几把锁和.net中的事务级别
回到目录 当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOC ...
- 日志分析系统——Hangout源码学习
这两天看了下hangout的代码,虽然没有运行体验过,但是也算是学习了一点皮毛. 架构浅谈 Hangout可以说是java版的Logstash,我是没有测试过性能,不过据说是kafka这边性能要高出L ...
- atitit 短信验证码的源码实现 .docx
atitit 短信验证码的源码实现 .docx 参考 Atitit usrQBM1603短信验证码规范1 主要方法1 源码实现1 参考 Atitit usrQBM1603短信验证码规范 主要方法 L ...
- 每天一个linux命令(50):crontab命令
前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- 每天一个linux命令(34):du 命令
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- javascript_core_02之函数、作用域
1.函数:封装一项任务步骤清单的代码段: ①声明:function 函数名(参数列表){ 步骤清单代码:return 返回值:} ②返回值:使调用者获得函数执行结果,return只返回,不保存: ③存 ...
- heroku部署java web项目
一.开发 在本地eclipse创建maven web项目(此时可以当成正常的javaweb项目开发即可.注意添加servlet依赖,此时不用添加jetty依赖) 二.部署前准备 1.首先在pom.xm ...
- android rectF
new Rect(left , top, right , bottom) 这个构造方法需要四个参数这四个参数 指明了什么位置 ?我们就来解释怎么画 这个 矩形 这四个 参数 分别代表的意思是:left ...