WCF通信的3种模式

1.正常模式:客户端调取接口-》等待服务响应-》接受响应-》执行客户端后面代码(wcf服务有入参,有返回值)

2.数据报模式:客户端调取接口-》不等待响应,直接执行客户端后面代码(wcf服务有入参,无返回值)

3.双工模式:客户端调取接口-》服务端立刻回复介绍到请求-》服务端继续执行,客户端也继续执行-》服务端执行回调客户端回调函数,传递信息给客户端(wcf服务有入参,无返回值,但必须定义客户端回调函数)

上代码:

接口代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WCFServerLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
[ServiceContract]
public interface IService1
{
/*
标记当前方法是一个请求响应方式
* 请求数据,客户端等待相应结果,再去执行下面代码
*/
[OperationContract]
string GetData(int value); /*
标记当前方法是一个数据报方法
* 请求数据过去,但不响应结果,客户端不用等待
*/
[OperationContract(IsOneWay=true)]
void WriteLog(string msg);
} }

实现代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WCFServerLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class Service1 : IService1
{
public string GetData(int value)
{
System.Threading.Thread.Sleep();
return string.Format("接收到消息: {0}", value);
} public void WriteLog(string msg)
{
System.Threading.Thread.Sleep();
}
}
}

客户端调用代码

        private void button2_Click(object sender, EventArgs e)
{
//正常调用
Client.ServiceReference1.Service1Client ss = new ServiceReference1.Service1Client();
MessageBox.Show("调用前");
string str= ss.GetData();
MessageBox.Show(str);
} private void button3_Click(object sender, EventArgs e)
{
//数据报
Client.ServiceReference1.Service1Client ss = new ServiceReference1.Service1Client();
MessageBox.Show("调用前");
ss.WriteLog("");
MessageBox.Show("调用后"); }

双工通信方式

服务端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel; namespace WCFServerLib
{
//定义双工通信:通信模型1.立即会返回数据。2.处理完成会再次返回数据,通过设定好的回调函数。
[ServiceContract(SessionMode=SessionMode.Required,CallbackContract=typeof(IResult))]
public interface IDuplex
{
//IsOneWay=true:双工通信
//双工通信不能有返回值
[OperationContract(IsOneWay=true)]
void Run(string msg);
} /// <summary>
/// 定义一个回调契约,供客户端实现它
/// </summary>
public interface IResult
{
[OperationContract(IsOneWay=true)]
void Reuslt(string msg);
} public class Duplex : IDuplex
{
IResult result;
public Duplex()
{
//从方法的操作上下文中获取到客户端传递过来的IResult这个接口的实现类对象
result = OperationContext.Current.GetCallbackChannel<IResult>();
}
public void Run(string msg)
{
//模拟5秒钟以后处理完成
System.Threading.Thread.Sleep();
result.Reuslt("处理完成"+msg);
}
}
}

客户端代码

        private void button1_Click(object sender, EventArgs e)
{
System.ServiceModel.InstanceContext ic = new InstanceContext(new CallBacks());
DuplexClient c = new DuplexClient(ic);
c.Run("--1--");//立即返回处理数据
MessageBox.Show("双工通信出来完毕");
}
} public class CallBacks : IDuplexCallback
{
/// <summary>
/// 双工通信回调方法
/// </summary>
/// <param name="msg"></param>
public void Reuslt(string msg)
{
MessageBox.Show(msg);
}
}

WCF的三种模式的更多相关文章

  1. git push :推送本地更改到远程仓库的三种模式

    摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...

  2. App开发三种模式

    APP开发三种模式 现在App开发的模式包含以下三种: Native App 原生开发AppWeb App 网页AppHybrid App 混合原生和Web技术开发的App 详细介绍: http:// ...

  3. [转]VMware Workstation网络连接的三种模式

    经常要使用VMWare Workstation来在本地测试不同的操作系统,以前也搞不清楚网络连接三种模式,最近看了几篇文章才算明白.现总结如下: 1. VMware Workstation的虚拟网络组 ...

  4. LVS三种模式配置及优点缺点比较

    目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种(LVS-DR,LVS-NAT,LVS-TUN)模式的简要配置 LVS是什么: http://www.lin ...

  5. LVS三种模式配置及优点缺点比较 转

    LVS三种模式配置及优点缺点比较   作者:gzh0222,发布于2012-11-12,来源:CSDN   目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种 ...

  6. MySQ binlog三种模式

    MySQ binlog三种模式及设置方法 1.1 Row Level  行模式 日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改 优点:在row level模式下,bin- ...

  7. delegate,notifucation,KVO三种模式实现通信的优缺点

             在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delega ...

  8. 辛星跟您玩转vim第一节之vim的下载与三种模式

    首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...

  9. VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT

    VMware虚拟机上网络连接(network type)的三种模式--bridged.host-only.NAT VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换 ...

随机推荐

  1. Spring集成MyBatis01 【推荐使用】、springMVC中文乱码和json转换问题

    1 导包 1.1 spring-webmvc : spring框架包(当然里面也包含springmvc) 1.2 mybatis : mybatis框架包 1.3 mybatis-spring : s ...

  2. PDF的一些工具

    PdfStreamDumper Pdftk 这里有一个链接,列出了很多pdf免费工具 https://en.wikipedia.org/wiki/Category:Free_PDF_software ...

  3. hadoop运行故障问题解决1——datanode节点启动后自动关闭

    ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceID ...

  4. 使用Maven搭建SSM框架(Eclipse)

    今天学习一下使用Maven搭建SSM框架,以前都是用别人配置好的框架写代码,今天试试自己配置一下SSM框架. 这里我的参数是Windows7 64位,tomcat9,eclipse-jee-neon- ...

  5. Cadence如何自定义快捷键

    第一步:将pcbenv复制到SPB_Data下,并覆盖原来的文件 第二步:打开pcbenv文件,将script和views文件夹以及env复制到cadence安装目录\SPB_16.3\share\p ...

  6. jQuery 插件开发——countdown(倒计时)

    故事背景:按照惯例,先写下故事背景,其实也是再次汇报下最近开发情况的.做电商的都知道,这是个活动季啊,双十一.双十二.元旦....各种啊..其实说这么多就是想表达最近比较忙.呵呵^_^,正好今天抽点空 ...

  7. Unity中Awake的执行时间点

    https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html 根据官方文档,Awake的实际执行点,应该是对应mono脚本所在物体 ...

  8. Linux性能指标解释+Oracle性能指标解释

    Linux性能指标解释 类别 计数器名称 计数器描述 业界同行认可的资源阀值 memory Free(KB) 可用物理内存数 swap-in/out =0 Swap(KB) 已使用的虚拟内存数.在Li ...

  9. [poj 2106] Boolean Expressions 递归

    Description The objective of the program you are going to produce is to evaluate boolean expressions ...

  10. 【图灵学院09】RPC底层通讯原理之Netty线程模型源码分析

    1. dubbo 2.5.3 netty 3.2.5.Final