Дуплекс или ответ запроса с Apache ActiveMQ WCF Обязательный вопрос о конфигурации

Я пытаюсь использовать Apache. Привязка NMS.WCF для приложения WCF и получает следующую ошибку -

Контракт требует, чтобы TwoWay (или ответ запроса или дуплекс), но Связывающий '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, чтобы быть дуплексом, или разве он просто не поддерживает его?

5
задан Barry Hurt 13 January 2010 в 00:50
поделиться

1 ответ

Очередь сообщений, подобная ActiveMQ, как правило, по своей конструкции только односторонняя - в нее можно бросать сообщения, и все такое.

Реальным решением, если вам все-таки нужно вернуть ответы, является изменение ролей: сервис, которому вы отправили сообщение по вашему основному контракту (односторонний), станет клиентом, который отправит вам ответ во вторую очередь, в которой ваше приложение прослушивает в качестве сервера.

Смотрите некоторые MSDN документы и другие ресурсы по темам:

В образцах, как правило, используется MSMQ, так как это изначально поддерживается WCF, но основные принципы разделения задач на два отдельных контракта с односторонним движением, а также порядок установки и использования двух отдельных очередей запросов и ответов должны применяться и к ActiveMQ.

6
ответ дан 14 December 2019 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: