Duplex или запрос-повтор с помощью Apache ActiveMQ WCF. Вопрос о конфигурации привязки
Вопрос
Я пытаюсь использовать приложения 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 и другие ресурсы по темам:
- MSDN: очередь в WCF
- MSDN: двусторонняя связь по MSMQ в WCF
- MSDN Magazine: Служба ответов на очередь WCF
- CodeProject: WCF в очереди обмен сообщениями
- Майк Таулти: WCF, MSMQ и Compositeduplex
Образцы обычно используют MSMQ, так как это и наносит на виду, но основные принципы разрыва ваших задач на два отдельных односторонних контракта и как настройка и использование двух отдельных запросов и очередей ответов должны применяться и для ActiveMQ.