WCF实现全双工通信笔记

WCF的双工通信是指客户端和服务端都可以主动呼叫对方。在这种通信模式中,WCF利用双向绑定实现服务端和客户端相互公开终结点的信息。

在VS2015,.NET环境下进行测试


本章最大感悟是代理类必须是一个纯的代理类,即不应该有任何属性。(经他人测试貌似有属性也可以,但个人不推荐)


(1)打开WebConfig修改服务端的配置,应选择一个支持双工通信即会话的绑定(一般为wsDualHttpbinding和netTCPbinding)

<protocolMapping>

<add binding="wsDualHttpBinding" scheme="http"/>

(2)在服务端实现服务协定和操作协定以及服务协定的回调接口协定。

双工通信由两个接口组成,第一个接口用于服务,第二个接口用于回调。

[ServiceContract(CallbackContract = typeof(IServiceDuplexCallback))]

public interface IServiceDuplex

{

...

}

public interface IServiceDuplexCallback

{

...

}

(3)在客户端实现回调接口

在客户端实现中,有一个类实现服务端定义的双工协定回调接口,以便服务端利用它主动向该客户端发送信息。例如:

public class CallbackHandler : IServiceDuplexCallback

{

...

}

然后如果需要和服务端进行通信,首先需要创建InstanceContext类的一个实例,以便让服务端通过该实例知道通信的是哪个客户端对象。例如:

InstanceContext context = new InstanceContext(new CallbackHandler());

ServiceDuplexClient client = new ServiceDuplexClient(context);


需要注意的是,双工模型并不自动检测服务端或客户端何时关闭其通道。

解决方案:(1)发送心跳包,超时则认为关闭(2)用try-catch来捕获调用和回调异常,出错则认为关闭了通道

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Breeze_00/article/details/51549652
文章标签: wcf wsDualHTTP Proxy
个人分类: C#笔记
下一篇阿里云ECS(linux)添加ftp用户_并设置权限
想对作者说点什么? 我来说一句

WCF双工通信

2018年06月27日 1KB 下载

C# Socket 异步双工通讯示例

2015年01月05日 212KB 下载

没有更多推荐了,返回首页

关闭
关闭