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提供服务,服务是运行在后台的 ...
随机推荐
- Android中viewPager的一两点使用
Android中viewPager的一两点使用 viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用. 使用viewP ...
- WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型
回到目录 本讲比较实际,在WEB端有一个Index和Create方法,用来从web api显示实体列表数据和向api插入实体对象,这就是以往的网站,只不过是把数据持久化过程放到了web pai上面,它 ...
- Js 对 浏览器 的 URL的操作
下面是一些实例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- Python为什么不隐式实现self
Python为什么不隐式实现self Python中类的方法都需要显式的传入一个self占位参数,这让写过C#,Java,PHP,Javascript的我很是不习惯,但是Python这么吊,肯定是有他 ...
- jeasyUI的treegrid批量删除多行(转载)
看上去,JavaScript的变量类型,也可以分为值类型和引用类型.赋值操作中,值类型,各自独立,互不干涉:引用类型,指针而已,大家指向同一个对象. 为什么这样说呢? 我是从jeasyUI的treeg ...
- 用户代理字符串userAgent可实现的四个识别
定义 用户代理字符串:navigator.userAgent HTTP规范明确规定,浏览器应该发送简短的用户代理字符串,指明浏览器的名称和版本号.但现实中却没有这么简单. 发展历史 [1]1993年美 ...
- s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题
1.新建一个web project 2.首先生成Hibernate Facet 3.Hibernate Facet 安装步骤 4.然后是spring facet安装步骤 5.最后是struts fac ...
- hash算法总结收集
hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等条件中里面存取数据. ...
- 自制jQuery标签插件
在项目中需要一个添加标签的小插件,查看了一些已有插件后,发现很现成的高级插件,也有比较简单的插件.最后还是决定自己来写,这样能控制代码,以后与其他插件结合使用的时候能更好的把控.初步在IE6 7 8, ...
- JS实现弹出层对话框
点击按钮后,弹出层对话框,可交互,点击关闭后才关闭掉对话框. 效果图: 源码: <!doctype html> <html> <head> <meta cha ...