知识大全 一起学WCF--消息通信模式

Posted

篇首语:入于污泥而不染不受资产阶级糖衣炮弹的侵蚀,是最难能可贵的革命品质。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一起学WCF--消息通信模式相关的知识,希望对你有一定的参考价值。

一起学WCF--消息通信模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这一节 大家共同研究下WCF消息的通信模式 大体上来说 WCF共有 中通信模式

   请求答复模式

   单程模式

   双工模式

  接下来 我们一一研究

  

   请求答复模式

  请求答复模式是我们最常见和最常用的模式 WCF通信默认就采用的这种模式 这种模式就是客户端向服务器端发送消息后 需要等待服务器端执行完成 并返回结果

   客户端才能继续向下执行

  服务器代码

  [ServiceContract]

  public interface IService

  

  [OperationContract]

  string GetData(int value)

  [OperationContract]

  CompositeType GetDataUsingDataContract(CompositeType posite)

  // TODO: 在此添加您的服务操作

  

  public class Service : IService

  

  public string GetData(int value)

  

  System Threading Thread Sleep( )

  return string Format( You entered: value)

  

  

  客户端

  private void button _Click(object sender EventArgs e)

  

  //请求响应模式

  //等待服务器端执行完毕 客户端才继续向下执行

  SingleService Service Client client = new SingleService Service Client()

  string result = client GetData( )

  MessageBox Show(result)

  

   单程模式

  单程模式是客户端向服务器端发送消息后 并不需要等待服务器端执行完成和返回结果 客户端就可以继续向下执行

  使用单程模式的时候 要把操作契约的属性isoneway设为true [OperationContract(IsOneWay=true)]

  单程模式的操作契约的返回值都为void 单程契约的方法参数中不能使用ref out标记

  服务器端契约

  [OperationContract(IsOneWay=true)]

  void SingleGetData(string name)

  客户端

  private void button _Click(object sender EventArgs e)

  

  //单程模型

  //不用等待服务器端 直接直接向下执行

  SingleService Service Client client = new SingleService Service Client()

  client SingleGetData( hello )

  MessageBox Show( hello world )

  

   双工模式

  双工模式就是客户端可以向服务器端发送信息 服务器端也可以向客户端发送信息 可以理解为客户端可以调用服务器端的方法 服务器端也可以

  调用客户端的方法 双工模式要在契约中声明回调契约 服务器端通过回调契约调用客户端方法 声明回调契约用CallBackContract

  双工模式实际上可以分为单程双工模式和请求答复双工模式

   单程双工模式

  服务器端契约

  [ServiceContract(CallbackContract = typeof(ICallBackDuplService))]

  public interface IDuplService

  

  [OperationContract]

  void DoWork()

  [OperationContract(IsOneWay=true)]

  void GetDuplData(string data)

  

  public interface ICallBackDuplService

  

  [OperationContract(IsOneWay=true)]

  void ShowMsg(string msg)

  

  public class DuplService : IDuplService

  

  public void DoWork()

  

  

  #region IDuplService 成员

  public void GetDuplData(string data)

  

  string str= 欢迎使用双工 + data;

  //获取当前操作的上下文

  ICallBackDuplService callback = OperationContext Current GetCallbackChannel<ICallBackDuplService>()

  callback ShowMsg(str)

  

  

  客户端代码

  private void button _Click(object sender EventArgs e)

  

  InstanceContext instanceContext = new InstanceContext(new CallBackDuplService())

  DuplService DuplServiceClient client = new DuplService DuplServiceClient(instanceContext)

  client GetDuplData( Hello world )

  

  public class CallBackDuplService:DuplService IDuplServiceCallback

  

  #region IDuplServiceCallback 成员

  public void ShowMsg(string msg)

  

  //显示数据

  System Windows Forms MessageBox Show(msg)

  

  #endregion

  

   请求答复双工模式

  服务器端契约

  [ServiceContract(CallbackContract = typeof(ICallBackDuplService))]

  public interface IDuplService

  

  [OperationContract]

  void DoWork()

  [OperationContract(IsOneWay = true)]

  void HelloDupl(string name)

  

  public interface ICallBackDuplService

  

  [OperationContract]

  void ConsoleMsg(string msg)

  

  [ServiceBehavior(ConcurrencyMode = ConcurrencyMode Reentrant)]

  public class DuplService : IDuplService

  

  #region IDuplService 成员

  public void HelloDupl(string name)

  

  string str = 双工通信模式 +name;

  ICallBackDuplService callback = OperationContext Current GetCallbackChannel<ICallBackDuplService>()

  callback ConsoleMsg(str)

  

  #endregion

  

  客户端

  private void button _Click(object sender EventArgs e)

  

  InstanceContext instanceContext = new InstanceContext(new CallBackDuplService())

  DuplService DuplServiceClient client = new DuplService DuplServiceClient(instanceContext)

  client HelloDupl( 请求答复 )

  

  public class CallBackDuplService:DuplService IDuplServiceCallback

  

  #region IDuplServiceCallback 成员

  public void ShowMsg(string msg)

  

  //显示数据

  System Windows Forms MessageBox Show(msg)

  

  #endregion

  #region IDuplServiceCallback 成员

  public void ConsoleMsg(string msg)

  

  System Windows Forms MessageBox Show(msg)

  

  #endregion

cha138/Article/program/net/201311/12127

相关参考

知识大全 WCF通信简单示例

WCF通信简单示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天写了一个WCFdemo给大

知识大全 基于WCF和MSMQ构建发布/订阅消息总线

基于WCF和MSMQ构建发布/订阅消息总线  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文是

知识大全 一起学WCF--数据契约

一起学WCF--数据契约  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这一节我们来了解下WCF

知识大全 一起学WCF--PerSession实例行为

一起学WCF--PerSession实例行为  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这一

知识大全 SignalR与WCF双工模式结合实现服务端数据直推浏览器端

SignalR与WCF双工模式结合实现服务端数据直推浏览器端  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 使用微软消息队列实现C#进程间通信

使用微软消息队列实现C#进程间通信  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  顾名思义微软消

知识大全 利用Observer模式解决组件间通信问题

利用Observer模式解决组件间通信问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题的

知识大全 手机进入底电模式还能收到电话、微信消息吗?

手机进入底电模式还能收到电话、微信消息吗?你好没有影响的低电量模式可以延长手机的续航时间:打开后,将停用邮件获取、后台应用刷新与自动下载,并减弱或关闭部分视觉效果。iOS9的低功耗模式原理也并不复杂,

知识大全 WCF Tips之WCF应用程序的程序集划分

WCFTips之WCF应用程序的程序集划分  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  WCF

知识大全 ajax调用WCF服务

ajax调用WCF服务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关于AJAX调用WCF服务