5

我正在尝试将 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 配置为双工或者它只是不支持它?

4

1 回答 1

6

像 ActiveMQ 这样的消息队列通常在设计上只是一种单向的东西——您可以将消息放入其中,仅此而已。

如果您确实需要回复,真正的解决方案是颠倒角色:您在主合同上发送消息的服务(单向)将成为客户端,在第二个队列上向您发送回复,您的应用程序在该队列上正在作为服务器监听。

请参阅有关该主题的一些 MSDN 文档和其他资源:

这些示例通常使用 MSMQ,因为 WCF 本身就支持它,但是将任务分解为两个单独的单向协定以及如何设置和使用两个单独的请求和响应队列的基本原则也应该适用于 ActiveMQ。

于 2010-01-13T21:37:11.073 回答