wcf 通信模式一般分为三种;
1,请求/响应模式
2,单工模式
3,双工模式
一,请求/响应模式
请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应。这也意味着在接收到服务的响应以前,客户端不会继续执行操作。
缺点

– 如果执行操作需要很长的时间,则会降低客户端性能和响应能力。

优点

– 响应消息中可返回SOAP 错误,这表明可能在通信或处理中发生了一些与服务有关的错误状况。

例题:

如,上上节所示。直接添加WCF服务应用程序

二,单工模式

单向通信应是指通信只在一个方向进行,即从客户端流向服务。服务不会发送响应,而客户端也不会期望会有响应。这种情况下,客户端发送消息,然后继续执行。

若要为返回void 的操作指定单向消息交换,请将IsOneWay 属性设置为true,默认为false.

[OperationContract(IsOneWay=true)] 方法不能带有返回值、引用参数、输出参数

例题:就是将请求/响应模式例题上的方法改为 void()类型的,且客户端只是向服务端发送消息,服务器无消息返回给客户端,即从客户端看不出效果。

缺点

-看不出效果

优点

-响应速度快

三,双工模式

双工模式的特点是,无论使用单向消息发送还是请求/答复消息发送方式,服务和客户端均能够独立地向对方发送消息。对于必须直接与客户端通信或向消息交换的任意一方提供异步体验(包括类似于事件的行为)的服务来说,这种双向通信形式非常有用。

– 若要设计双工协定,还必须设计回调协定,并将该回调协定的类型分配给标记服务协定的ServiceContractAttribute 属性(attribute)的CallbackContract 属性(property)。

– 若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的方法声明

差不多类似于两个单工模式合并

例题:

服务端(配置文件和引用不再重复)

配置文件:略,如上节,配置文件部署形似。

IService1.cs:

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallback))]//获取双工协定时回调的协定的类型
    public interface IService1
    {
        [OperationContract(IsOneWay = true)]
        void AddNumer(int x,int y);

}

public interface IServiceDuplexCallback  //CallbackContract回调客户端方法
    {
        [OperationContract(IsOneWay = true)]
        void Calculate(int result);
    }

Service1.cs:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]//指服务协定实现内置的行为,获取传入消息中调用的实例数
    public class Service1 : IService1
    {
        IServiceDuplexCallback callback
        {
            get { return OperationContext.Current.GetCallbackChannel<IServiceDuplexCallback>(); }//获取客户端的通道及上下文权限
        }
        public void AddNumer(int x, int y)
        {
            int z = x + y;
            callback.Calculate(z);
        }

服务端:

添加服务引用,命名为myService

添加一个类CallbackHandler,用于向服务器流入方法

public class CallbackHandler : myService.IService1Callback
    {
        public void Calculate(int result)
        {
          Console.WriteLine("结果为:" + result);
        }
    }

program.cs

InstanceContext ic = new InstanceContext(new CallbackHandler());//实现上下文切换,获取服务器的实例
            myService.Service1Client client = new wcfClient.myService.Service1Client(ic);
            client.AddNumer(3, 4);

以上是个小例子,具体的完善在以后讲解半双工和全双工。

C# WCF的通信模式的更多相关文章

  1. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  2. WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  3. 无废话WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  4. 【转】WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  5. 【WCF--初入江湖】04 WCF通信模式

    04 WCF通信模式 WCF的通信模式有三种 [1]请求响应模式: 只能是客户端调用服务器; 客户端请求并等待服务器的响应后才继续执行后续操作(异步调用除外) [2]单工模式: 只能是客户端调用服务器 ...

  6. WCF入门教程3——WCF通信模式

    本章内容 请求/响应模式 单工模式 双工模式 WCF异步调用 请求与响应模式 请求/响应     请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应.这也意味着在接收到服务的响应以前 ...

  7. 十五天精通WCF——第六天 你必须要了解的3种通信模式

    wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...

  8. 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式

    一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...

  9. WCF三种通信模式

    WCF在通信过程中有三种模式:请求与答复.单向.双工通信. 请求与答复模式 描述:客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序 ...

随机推荐

  1. CodeForces - 1244E

    题意:给n个数,可以有k次的 + 1或 - 1,在k次操作之内,让n个数的最大值和最小值差最小. 思路:要让max和min的差值最小,也就等同于min--,max++,如果k==0结束操作,或者min ...

  2. 我国三大坐标系的区别(西安80、北京54、WGS-84)

    1.北京54坐标系(BJZ54) 北京54坐标系为参心大地坐标系,大地上的一点可用经度L54.纬度M54和大地高H54定位,它是以克拉索夫斯基椭球为基础,经局部平差后产生的坐标系. 1954年北京坐标 ...

  3. Benelux Algorithm Programming Contest 2019

    J. Jazz it Up!题目要求,n*m的因子中不能含有平方形式,且题目中已经说明n是一个无平方因子的数, 那么只要m是无平方因子的数,并且n和m没有共同的因子即可.要注意时间复杂度!代码:#in ...

  4. MyBatis(一):第一个MyBatis程序

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...

  5. node+express+mysql实现简单的数据增删改查

    前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp  新建一个以ejs为模板的expre ...

  6. linux系统管理,查看系统资源

    free 查看内存使用情况 -b  ===>  以byte为单位 -k  ===>  以Kb为单位 -m  ===>  以Mb为单位 -g  ===>  以Gb为单位 -t  ...

  7. Node教程——API接口开发(MangoDB+Express)

    一.大纲 大纲: 关于架构, 首先我们的有一个app.js这个就是根路由起点,用来最初的打入口 它的功能有: 1.1 引入模块创建基础的网站服务器, 1.2 导入bodyPasser,过滤还有处理我们 ...

  8. Python 1基础语法二(标识符、关键字、变量和字符串)

    一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...

  9. istream_iterator && istream_iteratorbuf

    注意 读字符时, std::istream_iterator 默认跳过空白符(除非用 std::noskipws 或等价物禁用,而 std::istreambuf_iterator 不跳过.另外, s ...

  10. sprigboot 异常 Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].Tomc...

    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...