Duplex или запрос-повтор с помощью Apache ActiveMQ WCF. Вопрос о конфигурации привязки

StackOverflow https://stackoverflow.com/questions/2053631

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top