Дуплекс или запрос-ответ с вопросом конфигурации привязки Apache ActiveMQ WCF - PullRequest
5 голосов
/ 13 января 2010

Я пытаюсь использовать привязки 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 на дуплекс или он просто не поддерживает его?

1 Ответ

6 голосов
/ 14 января 2010

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

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

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

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

...