Duplex ou demande-Reply avec la question de configuration de la liaison APCAhe activeMQ WCF

StackOverflow https://stackoverflow.com/questions/2053631

  •  20-09-2019
  •  | 
  •  

Question

J'essaie d'utiliser les liaisons apache.nms.wcf pour une application WCF et d'obtenir l'erreur suivante -

Le contrat nécessite TWOWAY (soit request-Reply ou Duplex), mais la liaison «NMSBinding» ne le prend pas en charge ou n'est pas configurée correctement pour la prendre en charge.

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>

Existe-t-il un moyen de configurer l'Apache NMS pour être duplex ou ne le prend-il pas tout simplement?

Était-ce utile?

La solution

Une file d'attente de messages comme ActiveMQ est normalement par conception seulement une chose à sens unique - vous pouvez y déposer des messages et c'est à peu près tout.

La vraie solution si vous avez besoin de réponses est de renverser les rôles: le service auquel vous avez envoyé un message sur votre contrat principal (unidirectionnel) deviendra le client qui vous renverra une réponse dans une deuxième file d'attente, sur laquelle votre application écoute le serveur.

Voir certains documents MSDN et autres ressources sur les sujets:

Les échantillons utilisent généralement le MSMQ car cela est soutenu nativement par WCF, mais les principes de base de la rupture de vos tâches en deux contrats unidirectionnels distincts et comment configurer et utiliser deux files d'attente de demande et de réponse distinctes devraient également s'appliquer à ActiveMQ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top