我正在尝试将Apache.NMS.WCF绑定用于WCF应用程序并收到以下错误 -
合同需要TwoWay(请求回复或双工),但Binding'NmsBinding'不支持它,或者没有正确配置以支持它。
我的system.service模型看起来像这样 -
<bindings>
<nmsBinding>
<binding
name="myNMSBinding"
destination="test.queue"
destinationType="TemporaryQueue"
>
</binding>
</nmsBinding>
</bindings>
<extensions>
<!--<bindingElementExtensions>
<add name="nmsTransPort"
type="Apache.NMS.WCF.NmsTransportElement, Apache.NMS.WCF, Version=1.1.0.1642, Culture=neutral, PublicKeyToken=82756feee3957618" />
</bindingElementExtensions>-->
<bindingExtensions>
<add name="nmsBinding"
type="Apache.NMS.WCF.NmsBindingCollection, Apache.NMS.WCF, Version=1.1.0.1642, Culture=neutral, PublicKeyToken=82756feee3957618"
/>
</bindingExtensions>
</extensions>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<!-- Service Endpoints -->
<endpoint
address="tcp://localhost:61616"
binding="nmsBinding"
bindingConfiguration="myNMSBinding"
contract="WcfService1.IService1"
/>
</service>
</services>
有没有办法将Apache NMS配置为双工或不支持它?
答案 0 :(得分:6)
像ActiveMQ这样的消息队列通常只是设计一个单向的东西 - 你可以将消息放入其中,而这就是它。
如果您确实需要回复,真正的解决方案是撤消角色:您在主合同上发送消息的服务(单向)将成为向第二个队列发回响应的客户端,在您的应用正在监听服务器。
请参阅有关主题的一些MSDN文档和其他资源:
示例通常使用MSMQ,因为WCF本身支持MSMQ,但是将任务分解为两个单独的单向合同以及如何设置和使用两个单独的请求和响应队列的基本原则也应该适用于ActiveMQ