本来前面还有一个章节“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基础之设计和实现服务协定的更多相关文章

  1. WCF学习心得------(二)设计和实现服务协定

    设计和实现服务协定 创建服务协定—WCF术语 消息 消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消息头. 服务 服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个 ...

  2. WCF从零学习之设计和实现服务协定2

    WCF从零学习之设计和实现服务协定(二)   在创建服务协定之前,有很多WCF术语,比如: 消息.服务.终结点 创建协定 类或接口都可以定义服务协定,建议使用接口,因为接口可以直接对服务协定建模 服务 ...

  3. 【WCF系列】(二)设计和实现服务协定

    设计和实现服务协定 WCF术语介绍 服务(Service):服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作. 终结点(EndPoint):终结点是用来发送或接收消息(或 ...

  4. WCF 设计和实现服务协定(01)

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking WCF 术语: • 消息 – 消息是一个独立的数据单元,它可能由几个部分组成,包含消息正文和消息头 ...

  5. 【架构之路之WCF全析(一)】--服务协定及消息模式

    上周微软开公布会说.NET支持全然跨平台和并开放Core源代码的新闻,让我们顿时感到.NET要迎来它的春天.尽管早在几年前.NET就能开发Android和IOS,可是这次的跨平台把Linux都放到了微 ...

  6. 【WCF全析(一)】--服务协定及消息模式

    上周微软开发布会说.NET支持完全跨平台和并开放Core源码的新闻,让我们顿时感到.NET要迎来它的春天.虽然早在几年前.NET就能开发Android和IOS,但是这次的跨平台把Linux都放到了微软 ...

  7. WCF服务编程 读书笔记——第1章 WCF基础(2)

    续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...

  8. WCF服务编程 读书笔记——第1章 WCF基础(1)

    第1章 WCF基础 本章主要介绍WCF的基本概念.构建模块以及WCF体系架构,以指导读者构建一个简单的WCF服务.从本章的内容中,我们可以了解到WCF的基本术语,包括地址(Address).绑定(Bi ...

  9. WCF入门教程(三)定义服务协定--属性标签

    WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...

随机推荐

  1. python--网络爬虫一

    http://hankjin.blog.163.com/blog/static/3373193720105140583594/ http://blog.csdn.net/wklken/article/ ...

  2. 洛谷 P1328 生活大爆炸版石头剪刀布【模拟/环/周期】

    题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...

  3. MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系

    http://fangjian0423.github.io/categories/mybatis/ http://xtutu.me/the-date-object-in-js/

  4. 开篇有益:为什么选择MongoDB?

    为啥用MongoDB? 赶NoSQL时髦? Auto-shard等激动人心的特性? •No! 08年,还都是浮云. 最初的想法是寻找一个可靠的分布式K/V解决MySQL的问题. NoSQL(NoSQL ...

  5. ubuntu下virtualbox 共享文件夹 & 访问USB设备

    在Ubuntu 12.04 上为Virtualbox 启用USB 设备支持 Ubuntu安装虚拟机,实现文件和USB的共享 Ubuntu下virtualbox 虚拟xp 访问USB设备

  6. 性能测试脚本开发(LR.NET控件)

    性能测试过程中,最耗费经历的就是编写性能测试脚本的过程,在大部分的测试工具中都是采用录制的方式,通过录制产生脚本,然后根据需要进行修改,以及参数化.有些时候为了能够完成某一个功能的脚本,需要将录制下来 ...

  7. 在cmd窗口输入命令遇到You must run this command from a command prompt with administrator privilege怎么办?

    点开始菜单,找到Accessories(附件),找到Command Prompt窗口,点右键,选“run as administrator”(以管理员身份运行),之后再执行先前的命令就好了. 2017 ...

  8. VueJS组件之全局组件与局部组件

    全局组件 所有实例都能用全局组件. HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  9. nodejs 简单的备份github代码初版

    传送门:http://www.jianshu.com/p/002efed0d3af 我的代码: const https = require('https'); const fs = require(& ...

  10. 如何在DOS窗口中显示UTF-8字符

    在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即 ...