2010-01-13 8 views
5

Я пытаюсь использовать привязки Apache.NMS.WCF для приложения WCF и получить следующее сообщение об ошибке -Дуплекс или запрос-ответ с Apache ActiveMQ WCF Binding Question по конфигурации

Договора требует 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 быть дуплексной или же она просто не поддерживает его?

ответ

6

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

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

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

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

+0

Благодарим за информацию Марка. –

+0

Я проигнорировал это, поскольку это неверно. ActiveMQ предоставляет несколько способов выполнения запроса-ответа. Одна из них - это временная очередь, которую вы можете использовать в качестве обратного адреса в сообщении. Эта «временная очередь» имеет временного потребителя. – Noctris

+2

@Noctris: и работает ли это с привязкой WCF? Вопрос явно заключался в использовании ActiveMQ ** из WCF ** - не об общих возможностях ... –