WCF基础之设计和实现服务协定
本来前面还有一个章节“WCF概述”,这章都是些文字概述,就不“复制”了,直接从第二章开始。
当然学习WCF还是要些基础的。https://msdn.microsoft.com/zh-cn/hh148206这个就是“原文”了,喜欢WCF的可以自己去下载。
WCF简单术语:
消息:消息是一个独立的数据单元,主要由消息头和消息正文组成,入门的时候我对它的理解简单说:发送一个消息,就是调用了一个方法,具体的以后再说。
服务:服务说简单点就是终结点的集合。
终节点:即包含我们所谓的WCF的ABC三要素的接受和发送消息的构造。
类或者接口都可以定义服务协定,但是推荐使用接口,它可以实现多个服务协定,因为接口可以继承多个,类只能继承一个。
//如下就是一个简单的服务协定 //ServiceContract属性的接口都表示该接口是一个服务协定, //OperationContract属性的方法都表示该方法是一个操作协定 //只有标记了这两个特性,才能被客户端发现 [ServiceContract] public interface IHelloWCFService { [OperationContract] string SayHello(); }
服务协定的三种操作模式:请求/应答、单向和双工
前两种是通过OperationContract的IsOneWay=True||False来切换
True为单向,False为请求/应答。IsOneWay默认值为False。
给个小提示:操作的返回值为void的时候也是有返回值的,所以如果是void请把IsOneWay设为True
[OperationContract(IsOneWay=true)] void SayHello();
接下来说说双工,这玩意儿。。。。。。。我就先说说我的理解,然后弄点代码。你自己下来多写两遍,不懂,你都会懂了。
说说人和洗衣机,人是客户端,洗衣机就是服务端。现在我们要洗衣服了,我们要调用洗衣机开始洗衣服的方法,并把衣服作为参数放进洗衣机,洗衣服肯定不是几分钟搞定的,这时候我们可以做些其他的,看看电视,扫扫地之类的,而洗衣机洗完衣服之后怎么让我们知道呢,洗衣机就说要不我给你个提示音吧,我说好,你就发出嘀嘀的声音,那么一切就ok了,当然你得跟这个洗衣机单独在一个房子里,要是房子里有许多洗衣机,或者许多其他人,洗衣机响了,你也不知道是不是你的洗好了。洗衣机洗完后,会发出嘀嘀的声音,我们人听到这声音以后,就会自动调用收衣服的方法。
好,就这么多了不知道说的是否够意思,反正你自己多写吧!
这是服务端代码
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IYiFuXiHaoLe))] public interface IXiYiJiService { [OperationContract(IsOneWay=true)] void XiYiFu(); } [ServiceContract] public interface IYiFuXiHaoLe { [OperationContract(IsOneWay=true)] void DiDi(); } public class XiYiJi:IXiYiJiService { public void XiYiFu() { //洗衣服耗时5秒 Thread.Sleep(); //洗好了,开始发出DIDi声让人听到 IYiFuXiHaoLe callback = OperationContext.Current.GetCallbackChannel<IYiFuXiHaoLe>(); callback.DiDi(); } }
这是客户端的
class Program { static void Main(string[] args) { TingDaoShengYin tdsy = new TingDaoShengYin(); InstanceContext context = new InstanceContext(tdsy); MyService.XiYiJiServiceClient myClient = new MyService.XiYiJiServiceClient(context); myClient.XiYiFu(); Console.ReadKey(); } } public class TingDaoShengYin:MyService.IXiYiJiServiceCallback { public void DiDi() { Console.WriteLine("开始收衣服了"); } }
sorry,忘了,要选一个支持双工的绑定。
WCF基础之设计和实现服务协定的更多相关文章
- WCF学习心得------(二)设计和实现服务协定
设计和实现服务协定 创建服务协定—WCF术语 消息 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头. 服务 服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个 ...
- WCF从零学习之设计和实现服务协定2
WCF从零学习之设计和实现服务协定(二) 在创建服务协定之前,有很多WCF术语,比如: 消息.服务.终结点 创建协定 类或接口都可以定义服务协定,建议使用接口,因为接口可以直接对服务协定建模 服务 ...
- 【WCF系列】(二)设计和实现服务协定
设计和实现服务协定 WCF术语介绍 服务(Service):服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作. 终结点(EndPoint):终结点是用来发送或接收消息(或 ...
- WCF 设计和实现服务协定(01)
作者:jiankunking 出处:http://blog.csdn.net/jiankunking WCF 术语: • 消息 – 消息是一个独立的数据单元,它可能由几个部分组成,包含消息正文和消息头 ...
- 【架构之路之WCF全析(一)】--服务协定及消息模式
上周微软开公布会说.NET支持全然跨平台和并开放Core源代码的新闻,让我们顿时感到.NET要迎来它的春天.尽管早在几年前.NET就能开发Android和IOS,可是这次的跨平台把Linux都放到了微 ...
- 【WCF全析(一)】--服务协定及消息模式
上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软 ...
- WCF服务编程 读书笔记——第1章 WCF基础(2)
续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...
- WCF服务编程 读书笔记——第1章 WCF基础(1)
第1章 WCF基础 本章主要介绍WCF的基本概念.构建模块以及WCF体系架构,以指导读者构建一个简单的WCF服务.从本章的内容中,我们可以了解到WCF的基本术语,包括地址(Address).绑定(Bi ...
- WCF入门教程(三)定义服务协定--属性标签
WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...
随机推荐
- 体育成绩统计——20180801模拟赛T3
体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...
- Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用 function RunDosCommand(Com ...
- Linux shell 提取文件名和目录名的一些方法(转)
很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...
- 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解【转】
http://www.cnblogs.com/qinpengming/archive/2013/06/08/3127346.html 1,什么是ODF .NE,?就是Oracle 为 .NET (OD ...
- 3D立体显示技术原理与游戏应用历程简介 【转】
本文来自 中关村ZOL 「3D 立体显示」可说是近来娱乐产业相当热门的话题,不但有好莱坞推出<阿凡达>等卖座 3D 立体电影,全球各大家电厂商也积极布局准备推出一系列支持 3D 立体显示的 ...
- Python--图像处理(2)
skimage提供了io模块,顾名思义,这个模块是用来图片输入输出操作的.为了方便练习,也提供一个data模块,里面嵌套了一些示例图片,我们可以直接使用. 引入skimage模块可用: 1 from ...
- Ubuntu下的计划任务 -- cron的基本知识
下面不完全: 参考:http://blog.csdn.net/cuker919/article/details/6336457 cron是一个Linux下的后台进程,用来定期的执行一些任务.因为我用的 ...
- DevExpress控件之TreeList
基于v18.1 使用AppendNode方法手动赋值时,首先要添加treeListColumn 默认样式 修改后的样式 1 ...
- 【AngularJS】Yeoman安装
看不到PPT的请自行解决DNS污染问题.
- maximal-rectangle——找出最大矩形的面积
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...