(1)WCF少废话系列之 _Hello WCF!
本节旨在通过实例的方式让初学者对WCF有一个感性的认识,坚持由特殊到普遍再由普遍到特殊的认知规律。
WCF(Windows Communication Fundation),微软分布式通信架构的集合,她集成并发展了微软以往的分布式解决方案,如DECOM,XML Web Service,WSE,remoting,Enterprise service ,MSMQ(微软消息队列),Namedpipe(命名管道)。WCF并非简单的将以上几种技术揉合起来,而是提供了统一的、互操作与安全可依赖的解决方案。
废话少说,我们通过一个实例从宏观上了解WCF是如何实现分布式应用的
WCF服务器端需要寄生在某个进程中才能发挥作用,下面讲解WCF的寄宿方式及其调用方式
² Console(控制台)寄宿
Step 1
ü 新建契约类库项目,命名:WCFDemo.Contracts,添加System.ServiceModel.dll引用(右击项目名称,在弹出的菜单中选择”添加引用”,在弹出的对话框中选择【.NET】选项卡,找到System.ServiceModel,点击确定即可)
ü 新建一个接口,命名:IHello.cs.接口的定义如下:
namespace WCFDemo.Contracts
{
//这就是服务契约的标识,用来定义具体服务的相关操作并公开此服务,如果无此标识将无法向外界公开服务
[ServiceContract]
public interface IHello
{
//操作契约标识,定义对外公开的操作以及操作的一些行为
[OperationContract]
string SayHello(string HelloTo);
}
}
Step 2
ü 新建一个服务类库,命名:WCFDemo.Services
ü 添加WCFDemo.Contracts项目引用(右击项目名称,在弹出的菜单中选择”添加引用”,在弹出的对话框中选择【项目】选项卡,找到WCFDemo.Contracts,点击确定即可)
ü 新建一个服务类,命名:Hello.cs,类的定义如下:
namespace WCFDemo.Services
{
//继承IHello接口,并实现接口中的方法
public class Hello : IHello
{
public string SayHello(string HelloTo)
{
return string.Format("Hello {0}!", HelloTo);
}
}
}
Step 3
ü 新建WCF服务器寄宿Console程序,记得选择的项目类型为【控制台应用程序】,添加WCFDemo.Contracts与WCFDemo.Services项目引用
ü 在Programe.cs 文件中写下以下代码
namespace WCFDemo.WCFServer
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(Hello)))
{
host.AddServiceEndpoint(typeof(IHello), new WSHttpBinding(), "http://localhost/WCFDemo/Hello");
host.Open();
host.Opened += (object sender, EventArgs e) =>
{
Console.WriteLine("WCF 服务器端Console寄宿程序已启动!");
};
Console.ReadLine();
}
}
}
}
Step 4
ü 新建WCF客户端Console程序,命名:WCFDemo.WCFClient,记得选择的项目类型为【控制台应用程序】,并添加WCFDemo.Contracts与WCFDemo.Services项目引用
ü 在Programe.cs 文件中写下以下代
namespace WCFDemo.Client
{
class Program
{
static void Main(string[] args)
{
//绑定类型,如何访问服务器
WSHttpBinding binding = new WSHttpBinding();
//地址,从哪儿找到服务
string address = "http://localhost/WCFDemo/Hello";
//建立与服务器指定的服务通道
ChannelFactory<IHello> factory = new ChannelFactory<IHello>(binding, address);
//创建通道实现通信
IHello hello = factory.CreateChannel();
//调用服务器端暴露的操作(方法)
Console.WriteLine(hello.SayHello("WCF"));
Console.ReadLine();
}
}
}
Step 5
ü 右击WCFDemo.WCFServer控制台项目,选择调试-》启动新实例,完成服务器寄宿
ü 右击WCFDemo.WCFClient控制台项目,选择调试-》启动新实例,查看客户端是否输入正确的信息
至此,一个简单的WCF分布式应用程序就算完成了,除了控制台进行服务的寄宿外,还可以通过Windows Services(Windows 服务),WinForm应用程序,Internet Information Service(IIS)WEB服务器寄宿,以下讲述IIS的寄宿方式,其它的寄宿方式与Console寄宿类似,这里面不再赘述
以上建好的代码结构如下:
² IIS Web服务器寄宿
IIS Web服务器寄宿是最为便捷的一种寄宿方式,易于布署,同时还可以通过IIS来实现管理与控制,是值得推荐的一种寄宿方式
WCF的IIS寄宿非常类似于XML Web Service的布署方式,WebService提供的是一个以asmx为后缀名的文件,而WCF提供的是一个以SVC为结尾的文件,现在大家可以感受到本章刚开始那句话的用意了吧,WCF统一了微软以往分布式的解决方案,但不管如何统一,本质性的东西都是要继承下来的,好了,废话少说,接下来我们看看如何实现服务的IIS寄宿
1. 新建一个WCF服务应用程序,命名:WCFDemo.WCFIIS,记得选择的项目类型为:WCF服务应用程序,添加WCFDemo.Contracts项目引用
2. 右击WCFDemo.WCFIIS,点击添加-》新建项目-》WCF服务,命名:HelloWCF.svc,并将其继承的接口更改为WCFDemo.Contracts项目中定义的IHello接口,并实现其中的方法,代码如下:
namespace WCFDemo.WCFIIS
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“HelloWCF”。
public class HelloWCF : IHello
{
public string SayHello(string HelloTo)
{
return string.Format("Hello {0}!", HelloTo);
}
}
}
至此,WCF服务的IIS寄宿已经完成,下面我们通过两种方式来实现以IIS寄宿方式的服务调用
Ø VS自带的WCF测试客户端
首先将当前的IIS寄宿项目WCFDemo.WCFIIS设为启动项目(右击项目,在弹出的菜单中选择【设为启动项目】),双击要调用的SVC文件,点击工具栏上的【启动调试】按钮或者按下F5快捷键,启动调试,此时VS会启动WCF测试客户端,界面如下:
双击要测试的方法,填写相应的参数信息,点击【调用】按钮,
Ø 通过添中服务引用的方式调用
让我们把目光转到WCFDemo.WCFClient项目上来,添加WCF的服务引用类似于添加WebService引用
右击WCFDemo.WCFClient项目,点击【添加服务引用】菜单,会弹出的菜单中点击【发现】按钮,会出现以下选项
选择HelloWCF.svc,并将命名空间命名为:HelloWCF,点击【确定】按钮,至此,一个WCF服务应用添加成功了
调用WCF服务
WCFDemo.WCFClient.HelloWCF.HelloClient client = new WCFClient.HelloWCF.HelloClient();
Console.WriteLine(client.SayHello("WCF"));
Console.ReadLine();
好了,本节内容到此结束了,吃中饭了
(1)WCF少废话系列之 _Hello WCF!的更多相关文章
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】
http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...
- WCF入门教程系列三
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- WCF开发实战系列五:创建WCF客户端程序
WCF开发实战系列五:创建WCF客户端程序 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在前面的三篇文章中我们分别介绍了WCF服务的三种载体:IIS.Self-Hos ...
- WCF Basics - FAQs Series【WCF基础----问答系列教程】
WCF学习系列一[WCF Interview Questions-Part 1 翻译系列] WCF学习系列二---[WCF Interview Questions – Part 2 翻译系列] WCF ...
- WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】
http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...
- WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...
- WCF编程系列(二)了解WCF
WCF编程系列(二)了解WCF 面向服务 服务是复用进化的结果,起初的复用是函数,面向对象编程的出现使复用从函数上升到对象,随后面向组件编程又将复用从对象上升到组件,现在面向服务编程将复用 ...
- WCF编程系列(一)初识WCF
WCF编程系列(一)初识WCF Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程模型.WCF的基本概念: 地址:定义服务的 ...
随机推荐
- s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device
1.启动参数如下: bootargs=root=/dev/nfs nfsroot=192.168.1.8:/opt/wheezy_fs ip=192.168.1.9:192.168.1.8:192.1 ...
- Repeater多列分别合并单元格
GridView.Repeater合并单元格可以参考http://www.cnblogs.com/zhmore/archive/2009/04/22/1440979.html,但是原文例子是合并一列的 ...
- img的空白符
在div里面嵌套了一个img出来问题,div的高度超过了img的高度,大约3px ,查看了样式没什么问题,后来百度了一下,找到了2种的方法都有效: 第一种:img{display:block} 第二种 ...
- redsocks 将socks代理转换成全局代理
redsocks 需要手动下载编译.前置需求为libevent组件,当然gcc什么的肯定是必须的. 获取源码 git clone https://github.com/darkk/redsocks 安 ...
- Linux 利用 locate 和 find 查找文件
Linux 利用 locate 和 find 查找文件 命令 locate 用于快速查找文件.文件夹.此命令并没有在磁盘上查找所有文件,而是在预先建立的数据库里进行搜索.可以使用 updatedb 命 ...
- angular中动态添加的元素绑定事件问题
$compile http://segmentfault.com/q/1010000000726448/a-1020000000727088 接口下载问题
- 常见http status code
常见http status code 常见的状态码: HTTP: Status200– 服务器成功返回网页 HTTP: Status404– 请求的网页不存在 HTTP: Status503– 服务不 ...
- 学习笔记找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID.
解决 找到多个具有相同 ID“_header”的控件,FindControl 要求控件具有唯一的 ID. private void DisplayHotBooks() { //获取 ...
- hihocoder挑战赛26
某蒟蒻成功的·写出了T1并rank16...小岛的题目真难... 传送门:http://hihocoder.com/contest/challenge26 T1 如果你想要暴力枚举的话显然是不行的 如 ...
- Javascript学习笔记1 javascript的特点
..对于网页而言,Javascript无处不在,对于英语不好的人它简直是噩梦般的存在,但形式所逼,今天开始着手学习!希望自己能坚持下去.从什么地方着手,我的目标是从大处着眼,从应用着眼,不抠细节,反正 ...