Question

J'ai une application BizTalk Server 2006 qui a un sendport en utilisant MSMQ.

J'ai aussi une application WCF WinForms hébergement avec plusieurs services WCF (dans l'environnement de développement, de la production que 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 est pas un service WCF, donc NetMsmqBinding est impossible).

Je vois que le message est correctement placé sur la file d'attente à distance parce que j'activé l'option journal et je vois le message dans la file d'attente de journal, mais la file d'attente est vide et le service WCF ne sélectionne pas le message.

Quelqu'un peut-il me donner un indice où regarder pour 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 stucked à MsmqIntegrationBinding
  • la liaison MSMQIntegration ne pas utiliser DataContract sérialiseur. , Il sérialise plutôt les données basées sur la propriété MsmqMessageSerializationFormat. La valeur par défaut est MsmqMessageSerializationFormat.Xml ce qui signifie que XmlSerializer sera utilisé. La raison est que le transport d'intégration MSMQ est conçu spécifiquement pour interop avec les applications natives MSMQ / de System.Messaging
  • Parce que la liaison MSMQIntegration utilise la plaine ancienne XmlSerializer, je n'ai pas la capacité facile à utiliser la 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-sérialisation-in-WCF / )

(modifier 2):

I vérifié les données de trace de diagnostic à partir du service WCF et le message a été abandonné en raison d'une exception de désérialisation. La seule solution est maintenant de créer la classe DataContract main ...

(modifier 3): en utilisant l'outil xsd.exe au lieu du svcutil.exe j'ai créé la classe DataContract, donc pas de travail ici fabriqué à la main ;-) Donc, la conclusion est d'utiliser xsd.exe pour les classes de contrat de données qui sont utilisé comme paramètre dans la méthode de service WCF. En effet, les forces MsmqIntegrationBinding vous de faire tous les types DataContract comme sérialisable avec le XMLSerializer au lieu de la valeur par défaut DataContractSerializer.

Était-ce utile?

La solution

Vous pouvez essayer d'activer le traçage WCF.

Il peut vous aider à comprendre ce qui se passe, et ce qui ne se produit pas.

Ce qui suit est un exemple de .config pour activer le traçage. Assurez-vous que le fichier .config se trouve dans le même dossier de votre hôte de service WCF.

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Warning" 
              propagateActivity="true" >
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>

      <source name="myUserTraceSource" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
    </sources>

    <sharedListeners>
      <add name="xml" 
           type="System.Diagnostics.XmlWriterTraceListener" 
           initializeData="C:\trace_logs\TraceLog.svclog" />
    </sharedListeners>

  </system.diagnostics>
</configuration>

Microsoft fournit un Service Trace Tool Viewer pour lire les fichiers .svclog.

Assurez-vous que le chemin dans initializeData est inscriptible par votre service.

Autres conseils

La première chose à vérifier est ici les droits du service WCF. La connexion est à la file d'attente de messages se fait par un compte qui est autorisé à se connecter à la file d'attente de messages.

Il peut également être due à une erreur de configuration, est la configuration de votre connexion correcte?

Vérifiez le journal des événements, il peut y avoir une erreur là, que vous pointera dans les bonnes directions.

Avez-vous vérifié si le message est en effet laissé dans la file d'attente par le service WCF, ou est-elle pris en charge et supprimé et juste Traitées par WCF?

Quelque chose que je vais essayer est joindre un gestionnaire à la balise

scroll top