2010-01-13 5 views
5

Próbuję użyć powiązania Apache.NMS.WCF dla aplikacji WCF i pojawia się następujący błąd -Duplex lub żądanie-odpowiedź z Apache ActiveMQ WCF konfiguracji powiązania pytanie w

Umowa wymaga TwoWay (albo żądanie-odpowiedź lub duplex), ale Binding "NmsBinding" nie obsługuje go lub nie jest odpowiednio skonfigurowany, aby go obsługiwać.

Mój model system.service wygląda następująco -

<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> 

Czy istnieje sposób, aby skonfigurować Apache NMS się dupleks, czy też po prostu go nie wspierać?

Odpowiedz

6

Kolejka komunikatów, taka jak ActiveMQ, jest zwykle zaprojektowana tylko w jedną stronę - możesz wrzucić wiadomości i to wszystko.

Prawdziwym rozwiązaniem, jeśli potrzebujesz odpowiedzi, jest odwrócenie ról: usługa, do której wysłałeś wiadomość na głównej umowie (w jedną stronę) stanie się klientem, który odsyła odpowiedź w drugiej kolejce, na której aplikacja nasłuchuje jako serwer.

Zobacz kilka docs MSDN i innych zasobów na tematy:

Próbki zazwyczaj używają MSMQ, ponieważ jest to natywnie obsługiwane przez WCF, ale podstawowe zasady dzielenia zadań na dwie oddzielne jednokierunkowe umowy oraz sposób konfigurowania i używania dwóch oddzielnych kolejek żądań i odpowiedzi powinny również mieć zastosowanie do ActiveMQ.

+0

Dzięki za informację Marc. –

+0

Obniżyłem to, ponieważ jest ono nieprawidłowe. ActiveMQ oferuje wiele sposobów wykonywania reakcji na żądanie. Jedną z nich jest kolejka tymczasowa, którą możesz wykorzystać jako adres zwrotny w wiadomości. Ta "kolejka tymczasowa" ma tymczasowego konsumenta .. – Noctris

+2

@Noctris: czy to działa również z wiązaniem WCF? Pytanie dotyczyło użycia ActiveMQ ** z WCF ** - nie o jego ogólnych możliwościach ... –