三种通讯方式
定义服务边界,定制wsdl,客户端根据不同的wsdl生成不同的代码
三种模式
-
RPC 请求响应式(默认)
wsdl文件如下
生成的代理代码如下
都会生成两个方法(请求,接收)
TCP通讯
fillder抓包:
使用 NetTcpBinding 时,本地调试使用new NetTcpBinding()可以成功,部署到虚拟机会报错,需修改服务端bingding的安全模式 new NetTcpBinding(SecurityMode.None)
-
单工通信IsOnWay(在线,离线[消息队列])
不需要及时回复,允许出现少量消息丢失(日志系统,邮件,短信)
如下Report1方法为单工通信:
如下wsdl文件中Report1方法只有input
如下生成的客户端代码(对比RPC中代码)
没有返回报文,而不是单向的接口即使返回值为void仍然会返回报文,而且状态码为202
(202 Accepted服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。) -
双工通信 客户端和服务端相互通信
可以延伸到发布订阅模式(publish/subscribe)
前提:bingding必须支持双工(NetTcpBinding,WSDualHttpBinding)
代码实现步骤:
步骤一:在当前ServiceContract中指定Client契约(回调函数)(指定方法如下图)
回调函数生命为IsOneWay防止出现服务端死锁异常
步骤二:客户端实现回调契约
客户端调用
步骤三:服务端收到客户端请求后处理时,获取客户端channel,调用回调函数