三种通讯方式

定义服务边界,定制wsdl,客户端根据不同的wsdl生成不同的代码

 

三种模式

  1. RPC 请求响应式(默认)

    wsdl文件如下

     生成的代理代码如下

     都会生成两个方法(请求,接收)

    TCP通讯


    fillder抓包:

     

    使用 NetTcpBinding 时,本地调试使用new NetTcpBinding()可以成功,部署到虚拟机会报错,需修改服务端bingding的安全模式 new NetTcpBinding(SecurityMode.None)

  2. 单工通信IsOnWay(在线,离线[消息队列])

    不需要及时回复,允许出现少量消息丢失(日志系统,邮件,短信)
    如下Report1方法为单工通信:

    如下wsdl文件中Report1方法只有input

    如下生成的客户端代码(对比RPC中代码)

     

     

    没有返回报文,而不是单向的接口即使返回值为void仍然会返回报文,而且状态码为202
    (202 Accepted服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。

     

     

     

     

  3. 双工通信 客户端和服务端相互通信

    可以延伸到发布订阅模式(publish/subscribe)
    前提:bingding必须支持双工(NetTcpBinding,WSDualHttpBinding)
    代码实现步骤:
    步骤一:在当前ServiceContract中指定Client契约(回调函数)(指定方法如下图)

     

      

    回调函数生命为IsOneWay防止出现服务端死锁异常

    步骤二:客户端实现回调契约

    客户端调用

     

     步骤三:服务端收到客户端请求后处理时,获取客户端channel,调用回调函数

     

         

posted @ 2020-01-11 21:39  vvf  阅读(555)  评论(0编辑  收藏  举报