2010-01-13 24 views
5

Je suis en train d'utiliser les liaisons Apache.NMS.WCF pour une application WCF et obtenir l'erreur suivante -Duplex ou demande de réponse avec Apache ActiveMQ WCF Reliure question de configuration

contrat nécessite TwoWay (soit la demande de réponse ou duplex), mais Binding 'NmsBinding' ne le supporte pas ou n'est pas configuré correctement pour le supporter.

Mon modèle system.service ressemble à ceci -

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

Est-il possible de configurer Apache NMS être duplex ou juste ne pas le soutenir?

Répondre

6

Une file d'attente de messages telle qu'ActiveMQ n'a normalement qu'un but unilatéral - vous pouvez y déposer des messages et c'est à peu près tout. La vraie solution si vous avez besoin de réponses en retour est d'inverser les rôles: le service auquel vous avez envoyé un message sur votre contrat principal (unidirectionnel) deviendra le client qui vous renvoie une réponse dans une deuxième file d'attente, sur lequel votre application écoute en tant que serveur.

Voir quelques docs MSDN et d'autres ressources sur les thèmes:

Les exemples utilisent généralement MSMQ étant donné qu'ils sont pris en charge par WCF, mais les principes de base de la division de vos tâches en deux contrats unidirectionnels distincts et de la configuration et de l'utilisation de deux files d'attente de demande et de réponse distinctes s'appliquent également à ActiveMQ.

+0

Merci pour l'info Marc. –

+0

J'ai downvoted ceci car c'est incorrect. ActiveMQ vous offre plusieurs façons de faire une demande-réponse. L'un d'eux est la file d'attente temporaire que vous pouvez utiliser comme adresse de retour sur un message. Cette "file d'attente temporaire" a un consommateur temporaire. – Noctris

+2

@Noctris: et cela fonctionne-t-il avec une liaison WCF? La question était clairement sur l'utilisation de ActiveMQ ** de WCF ** - pas sur ses capacités générales ... –