zoukankan      html  css  js  c++  java
  • WCF平台下MSMQ调用方式总结

    如果在WCF服务中采用了MSMQ方式进行消息传递,那么怎么调用这个服务呢?
    通过总结,发现至少有2种方式可以使用。

    1. 由于WCF下MSMQ不能发布元数据,因此,要想通过net.msmq://***的方式发布、获取元数据,都是徒劳无获的。服务器端不发布元数据倒没有什么,可是客户端无法获得元数据,将无法编程,进而调用这个WCF服务。这怎么办?
    还好,在《WCF服务编程》一书中,有这么一段:WCF不能在MSMQ上交换元数据。因此,对于一个只有队列调用的服务而言,同样可以以公开一个MEX终结点,或许允许基于HTTP-GET进行元数据交换,因为服务的客户端仍然需要一种方法获取服务的描述,并通过它实现绑定。

    博客园中【webabcd(王磊)】有一篇介绍WCF和MSMQ的文章,介绍的就是采用HTTP-GET方式发布元数据,经实验发现,最终效果不错。

    服务端部分示例代码如下:

    <service name="WCFClass.MSMQ"  behaviorConfiguration="MessageBehavior">
            <endpoint address="net.msmq://localhost/private/MSMQ" binding="netMsmqBinding" contract="WCFClass.IMSMQ" bindingConfiguration="MSMQBindingConfiguration" name="abc" />
            
    <endpoint address="mex" binding="mexHttpBinding"  contract="IMetadataExchange" />
            
    <host>
              
    <baseAddresses>
                
    <add baseAddress="http://localhost:12345/Message/MSMQ"/>
                
    <add baseAddress="net.msmq://localhost/private/MSMQ"/>
              
    </baseAddresses>
            
    </host>
          
    </service>

    如此,在客户端添加对元数据的web引用后,即能实现。

    2. 既然服务器端不便发布元数据,那么不妨让客户端直接引用服务端的服务接口。如此一来,元数据,你知、我知。服务器就能与获得元数据的客户端进行消息传递。最终效果也很好。

    ChannelFactory<WCFClass.IMSMQ> channelFactory = new ChannelFactory<WCFClass.IMSMQ>("CalculatorClient");
    WCFClass.IMSMQ calculate 
    = channelFactory.CreateChannel();


    此代码参考了博客园中【zhuweisky】的技术文章。感谢两位。

    3.客户端通过MSMQ调用WCF服务流程示意图:

     

    文章出处:www.cnblogs.com/jizhong

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。

  • 相关阅读:
    获取本机IP地址[JavaScript / Node.js]
    python 优雅的解析 jsonp
    Ext.jsTree 向子节点添加叶子节点
    LeetCode面试题 08.05. 递归乘法:A * B 就是B个A相加
    LeetCode第235题:二叉搜索树的最近公共祖先——到两个点路径交集的最后一个元素
    InvalidMongoDbApiUsageException之重复的字段条件
    leetcode第6题:Z字形变换--直接模拟求解法
    Arch Linux 安装指南
    从Windows文件夹到Linux分区
    华为 服务器 存储相关资料
  • 原文地址:https://www.cnblogs.com/jizhong/p/2050171.html
Copyright © 2011-2022 走看看