J'ai une application BizTalk 2006 qui a un sendport utilisant MSMQ.WCF avec MSMQIntegrationBinding ne pas ramasser un message de la file d'attente
J'ai également une application d'hébergement WCF winforms avec plusieurs services WCF (dans l'environnement de développement, en production, j'utilise un service windows comme hébergement).
L'un des services WCF que j'ai créé a un MSMQIntegrationBinding (en raison du fait que BizTalk n'est pas un service WCF, donc NetMSMQBinding n'est pas possible).
Je vois que le message est correctement placé dans la file d'attente éloignée car j'ai activé l'option de journal et je vois le message dans la file d'attente de journal, mais la file est vide et le service WCF ne capte pas le message.
Quelqu'un peut-il me donner une idée de la façon de résoudre ce problème?
(modifier 1): je l'ai fait quelques recherches sur ce sujet:
- Lorsque vous communiquez avec BizTalk Server 2006 R2 avec MSMQ, vous devez utiliser MsmqIntegrationBinding parce NetMsmqBinding est seulement pour WCF à WCF
- Je suis donc bloqué à MSMQIntegrationBinding
- La liaison MSMQIntegration n'utilise pas le sérialiseur DataContract. Au lieu de cela, il sérialise les données en fonction de la propriété MsmqMessageSerializationFormat. La valeur par défaut est MsmqMessageSerializationFormat.Xml, ce qui signifie que XmlSerializer sera utilisé. La raison derrière cela est que le transport d'intégration msmq est conçu spécifiquement pour interopérer avec les applications MSMQ/System.Messaging natives.
- Parce que la liaison MSMQIntegration utilise l'ancien XmlSerializer, je n'ai pas la possibilité d'utiliser svcutil.exe pour générer mes classes de données. Donc, je dois créer mes cours DataContract à la main .... pfffffffffff
(référence: http://social.msdn.microsoft.com/Forums/en/wcf/thread/2d48fe90-5c2a-4156-8a3f-2e21d5638fa1 et http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/)
(modifier 2):
J'ai vérifié les données de trace de diagnostic de la WCF service et le message a été abandonné en raison d'une exception de désérialisation. La seule solution maintenant est de créer la classe datacontract à la main ...
(edit 3): en utilisant l'outil xsd.exe au lieu de svcutil.exe j'ai créé la classe datacontract, donc pas de travail artisanal ici; - La conclusion est donc d'utiliser xsd.exe pour les classes de contrat de données utilisées comme paramètre dans la méthode de service WCF. Cela est dû au fait que MSMQIntegrationBinding vous oblige à rendre tous les types de contrat de données comme sérialisables avec XMLSerializer au lieu de DataContractSerializer par défaut.
merci Daniel, je le savais déjà, mais je l'avais cité dans mon fichier .config ;-) Je l'activerai pour voir le journal WCF . –
Daniel, j'ai attribué votre réponse comme plus utile, la solution a été trouvée facilement en regardant les informations de trace. –
Bravo Patrick. Je suis content que tu l'aies résolu. –