WCF-双工模式

客户端调用服务方法时附加上一个回调对象,服务端方法执行完后通过回调对象调用客户端中的方法。双方需要定义回调契约,并且客户端需要实现这个回调契约。

先定义两个接口,一个作为WCF类库服务ICalculator接口,另一个回调契约接口ICallback:

  [ServiceContract(CallbackContract = typeof(ICallback))]    public interface ICalculator    {        [OperationContract]        void Add(int x, int y);    }    public interface ICallback    {        [OperationContract]        void Dis(int result, int x, int y);    }

ICalculator的服务契约中通过CallbackContract声明回调契约。
  对应服务实现为:

 [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
    public class Cal : ICalculator
    {
        public void Add(int x, int y)
        {
            ICallback back = OperationContext.Current.GetCallbackChannel<ICallback>();
           back.Dis(x + y, x, y);
        }
    }

当客户端调用Add方法时,可以通过OperationContext的Current获取当前的回调通道,从而可以调用客户端方法。

服务寄宿使用支持双工通信的netTcpBinding:

 static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(kk.Cal));
            host.AddServiceEndpoint(typeof(kk.ICalculator), new NetTcpBinding(), "net.tcp://localhost:6666");
            host.Opened+=delegate{Console.WriteLine("Service start!");};
            host.Open();
            Console.ReadLine();
        }

客户端代码:

 class Program
    {
        static void Main(string[] args)
        {
            DuplexChannelFactory<kk.ICalculator> fact = new DuplexChannelFactory<kk.ICalculator>(new InstanceContext(new Back()),
                new NetTcpBinding(), new EndpointAddress(new Uri("net.tcp://localhost:6666")));
            kk.ICalculator cal = fact.CreateChannel();
          cal.Add(34, 34);
        }
    }

    public class Back : kk.ICallback
    {
        public void Dis(int result, int x, int y)
        {
            Console.WriteLine("{0}+{1}={2}", x, y, result);
        }
    }

通过DuplexChannelFactory<TChannel>获取双工通道工厂,第一个参数为InstanceContext类型,参数传入一个实现了回调契约的实例。

时间: 2024-09-30 22:08:33

WCF-双工模式的相关文章

WCF双工模式

双工模式 描述:双工模式建立在答复模式和单向模式的基础之上,实现客户端与服务端相互的调用. 相互调用:以往我们只是在客户端调用服务端,然后服务端有返回值返回客户端,而相互调用不光是客户端调用服务端,而且服务端也可以调用客户端的方法. 1.添加WCF服务 Service2.svc,并定义好回调的接口,服务器端接口IService2.cs: using System; using System.Collections.Generic; using System.Linq; using System.

使用wcf的双工模式做的一个控制台聊天app

//wcf 服务 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace WcfService1 { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文

Wcf 双工通信的应用

概述 双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具有一些变体,比如典型的订阅-发布模式就可以看成是双工模式的一种表现形式.双工消息交换模式使服务端回调(Callback)客户端操作成为可能. 在Wcf中不是所有的绑定协议都支持回调操作,BasicHttpBinding,WSHttpBinding绑定协议不支持回调操作:NetTcpBindin

Linux 系统修改网卡工作双工模式

很久以前修改Linux系统网卡工作模式的命令是mii-tools ,后来随着计算机服务器硬件的发展,早已经进入1000Mbps普及的时代,现在大型服务器基本都是万兆工作模式. mii-tools 并不能正确识别超过100M 的网卡; 因为 MII以4位半字节方式传送数据双向传输,时钟速率25MHz.其工作速率可达100Mb/s. ethtool 工具就是专门替代mii-tools 的,它可以修改大带宽的网络接口双工模式 等信息. ethtool 具体用法如下: # ethtool eth0   

&lt;转&gt;WCF实例化模式与高并发处理

WCF实例化模式与高并发控制 1.实例化模式InstanceModel 1.1 PerCall:单调模式 每次调用都会产生一个实例 例[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)] 1.2 PerSession会话模式 每次调用都有同一个服务进行处理 [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 1.3 SingleT

iperf3已不再支持双工模式测试

iperf是一个很好的网络流量测试工具,最近想在工具里面集成iperf最新的版本iperf3,希望借助iperf3测试以太网口的吞吐量,客户要求测试双工模式下吞吐量,可是,整了一圈,原来iperf3并不支持双工模式测试,iperf2是指支持的. 官方原文是这么说的: Not planning to support these iperf2 flags. If you really miss these options, please submit a request in the issue t

linux网卡速率和双工模式的配置

linux网卡速率和双工模式的配置 (2012-09-06 14:39:57) 转载▼ 标签: 科技 网络接口 协商 网卡 工具 it 分类: Linux 改变网络接口的速度和协商方式的工具miitool 和ethtool 通过mii-tool和ethtool工具来调整网卡的速度.双工等,这样能提高网卡的效率: mii-tool 配置网络设备协商方式的工具 mii-tool 介绍 mii-tool - view, manipulate media-independent interface st

TDD-LTE与FDD-LTE区别之双工模式与帧结构

这一节我们来聊一聊TDD与FDD这两种双工模式的不同及其帧结构的不同. 首先先来看一张关于这两种双工模式的大概工作模式的图: : 从图中,我们可以看到,对于FDD,它是在两个对称的频率下进行传送数据,中间有一个保护频率来间隔上下行数据,但是在时间维度上,上下行数据是一致连续的: 对于TDD系统来说刚好相反,在频率维度上上下行数据是可以相同的,在时间维度上,通过保护间隔将上下行数据分隔开,以防止上下行同频之间的干扰. 从时间维度上理解,可以把FDD系统理解成在高速公路上的汽车(数据)分别在不同车道

WCF流模式传输下采用NetTcpBinding

最近刚接触WCF,在项目中采用NetTcpBinding绑定运用流模式传输文件过程中,出现“套接字连接已中止.这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致”这个错误,上网查找了很久也没能很好的解决,一般的解决方案都是更换一种绑定协议,比如WSHttpBinding或者basicHttpBinding.可是由于实际情况又不能随意更换绑定协议,而且更换协议后出现其他的问题,所以一直不甘心.后来在博客园的一个博问中看到一个启发(具体是哪个提问现在已经找不到了,但是是受了d

wcf双工通信

一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: ? 1 定义一个IDuplexHello服务接口 ? 1 2 3 4 5 6 7 8 9 10 11 [ServiceContract(       Name = "DuplexHello",       Namespace = "http://microsoft.wcf.documentation",       CallbackContra