双工通讯Duplex具有以下特点:

1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作

2.消息交换过程中,服务端和客户端角色会发生调换

3.服务端处理完请求后,返回给客户端的不是reply,而是callback请求。

4.Duplex模式对Bindding有特殊的要求,它要求支持Duplex MEP(Message Exchange Pattern),如WSDualHttpBinding和NetTcpBinding

注意:在WCF预定义绑定类型中,WSDualHttpBinding和NetTcpBinding均提供了对双工通信的支持,但是两者在对双工通信的实现机制上却有本质的区别。WSDualHttpBinding是基于HTTP传输协议的;而HTTP协议本身是基于请求-回复的传输协议,基于HTTP的通道本质上都是单向的。WSDualHttpBinding实际上创建了两个通道,一个用于客户端向服务端的通信,而另一个则用于服务端到客户端的通信,从而间接地提供了双工通信的实现。而NetTcpBinding完全基于支持双工通信的TCP协议。

我今天的实例讲的就是双工通讯的一个使用场景订阅-发布模式,此时消息的双方变成了订阅者和发布者。订阅者有两个操作(订阅消息、取消订阅),当订阅者订阅消息后,发布者就开始向订阅者广播消息,当订阅者取消订阅后,就不会接收到广播的消息。具体如下图所示:

WCF初探-5:WCF消息交换模式之双工通讯(Duplex)

接下来我们我们创建基于WCF的双工通讯的订阅与发布模式的服务。工程结构如下图所示:

WCF初探-5:WCF消息交换模式之双工通讯(Duplex)

Publisher(发布者)和Subscriber(订阅者)都是Winform工程,我们把发布者作为服务端,订阅者作为客户端,发布者还需要承载寄宿服务。如下图设置好发布者和订阅者的界面,

发布者有一个寄宿服务的lable显示服务是否寄宿成功,一个消息文本框和一个发布按钮,输入文本后,点击发布就可以向订阅的客户端广播消息。

WCF初探-5:WCF消息交换模式之双工通讯(Duplex)

订阅者的界面上有一个消息接收的listbox,以及订阅消息和取消订阅按钮,还有一个输入客户端名称的文本框,界面如下图所示:

WCF初探-5:WCF消息交换模式之双工通讯(Duplex)

接下来我们开始实际的代码操作,首先完成发布者(服务端)的代码实现,创建IPublisher.cs文件,定义服务接口和回调接口,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Publisher
{

     [ServiceContract(CallbackContract = typeof(IPublisherEvents))]
     public interface IPublisher
     {
         [OperationContract(IsOneWay = true)]
         void Subscriber(string clientID,string clientName);               //订阅消息

         [OperationContract(IsOneWay = true)]
         void UnSubscriber(string clientID, string clientName);            //取消订阅
     }


     public interface IPublisherEvents
     {
         [OperationContract(IsOneWay = true)]
         void PublishMessage(string message);                        //发布消息
     }
}
View Code

相关文章:

  • 2021-12-20
  • 2021-04-20
  • 2021-12-31
  • 2021-06-07
  • 2022-12-23
  • 2022-03-06
猜你喜欢
  • 2021-05-24
  • 2021-07-10
  • 2022-01-14
  • 2021-11-02
  • 2021-07-22
  • 2021-06-03
相关资源
相似解决方案