2010-01-13 2 views
5

Ich versuche, die Apache.NMS.WCF Bindings für eine WCF-Anwendung zu verwenden und die folgende Fehlermeldung erhalten -Duplex oder Anfrage-Antwort mit Apache ActiveMQ WCF Bindung Konfiguration Frage

Vertrag erfordert TwoWay (entweder Anforderung-Antwort oder Duplex), aber Binding 'NmsBinding' unterstützt es nicht oder ist nicht richtig konfiguriert, um es zu unterstützen.

Mein system.service Modell sieht wie folgt aus -

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

Gibt es eine Möglichkeit, den Apache NMS zu konfigurieren Duplex sein oder hat sie es einfach nicht unterstützen?

Antwort

6

Eine Nachrichtenwarteschlange wie ActiveMQ ist normalerweise von Entwurf nur eine Einbahnstraße Sache - Sie können Nachrichten hineinwerfen und das ist es. Wenn Sie Antworten benötigen, ist die reelle Lösung, die Rollen umzukehren: Der Dienst, an den Sie eine Nachricht an Ihren Hauptvertrag gesendet haben (one-way), wird der Client, der Ihnen eine Antwort auf eine zweite Warteschlange zurücksendet. auf dem Ihre App als Server zuhört.

Sehen Sie einige MSDN-Dokumentation und andere Ressourcen zu den Themen:

Die Beispiele verwenden in der Regel MSMQ, da dies von WCF nativ unterstützt wird. Die grundlegenden Prinzipien der Aufgliederung Ihrer Aufgaben in zwei separate Ein-Weg-Verträge und die Einrichtung und Verwendung von zwei separaten Anforderungs- und Antwortwarteschlangen sollten jedoch auch für ActiveMQ gelten.

+0

Danke für die Info Marc. –

+0

Ich habe dies abgelehnt, da es falsch ist. ActiveMQ bietet Ihnen mehrere Möglichkeiten zum Ausführen von Request-Response. Eine davon ist die temporäre Warteschlange, die Sie als Rücksendeadresse für eine Nachricht verwenden können. Diese "temporäre Warteschlange" hat einen temporären Verbraucher. – Noctris

+2

@Noctris: und funktioniert das auch mit einer WCF-Bindung? Die Frage lautete eindeutig, wie man ActiveMQ ** von WCF ** benutzt - nicht wegen seiner allgemeinen Fähigkeiten ... –

Verwandte Themen