2017-10-10 41 views
0

Nous avons un XML d'enveloppe simple que j'essaye de débatcher en utilisant un pipeline personnalisé du côté réception d'un port d'envoi/réception HTTP. BizTalk passera à travers le premier ensemble dans l'enveloppe mais nous obtenons l'erreur 0xC0C01B4C (Zombie) pour tout ce qui suit. À des fins de test, j'envoie les résultats de la réception dans un dossier au format de fichier. J'espère que quelqu'un a vu cela auparavant, car j'ai essayé de nombreuses façons de résoudre ce problème.Erreur 0xC0C01B4C sur l'enveloppe de débatchage dans l'orchestration simple

Voici le message enveloppe

<?xml version="1.0" encoding="utf-16" ?> 
<xs:schema xmlns="http://CC.Schemas.ADDR.ADDR_IDs_Envelope" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ids="http://CC.Schemas.ADDR.ADDR_IDs" targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs_Envelope" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:import schemaLocation=".\ADDR_IDs.xsd" namespace="http://CC.Schemas.ADDR.ADDR_IDs" /> 
    <xs:annotation> 
     <xs:appinfo> 
      <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" /> 
      <b:references> 
       <b:reference targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs" /> 
      </b:references> 
     </xs:appinfo> 
    </xs:annotation> 
    <xs:element name="ADDR_IDs_Envelope"> 
     <xs:annotation> 
      <xs:appinfo> 
       <b:recordInfo body_xpath="/*[local-name()='ADDR_IDs_Envelope' and namespace-uri()='http://CC.Schemas.ADDR.ADDR_IDs_Envelope']/*[local-name()='Messages' and namespace-uri()='']" /> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Messages"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element maxOccurs="unbounded" ref="ids:ADDR_IDs" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

schéma de détails ID

<?xml version="1.0" encoding="utf-16" ?> 
<xs:schema xmlns="http://CC.Schemas.ADDR.ADDR_IDs" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ADDR_IDs"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="TransactionID" type="xs:string" /> 
       <xs:element name="JWID" type="xs:positiveInteger" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Orchestration

Répondre

0

Tout simplement votre Orchestration manque une boucle où il écoute le message suivant pour la même corrélation . Donc, après le traitement du premier message, il va juste quitter laissant les autres non transformés.

Le concept dont vous avez besoin s'appelle un convoi séquentiel. Vous devez avoir une autre forme de réception (dont les ensembles de corrélations suivants ont été initialisés sur la première forme de réception en tant que jeux de corrélations d'initialisation) à l'intérieur d'une boucle, ainsi qu'un moyen de quitter la boucle, par ex. ci-dessous est où il y a une limite de temps pour attendre la sortie de la boucle. Vous devez obtenir cette condition de sortie correcte sinon il y a toujours la possibilité d'un zombie.

enter image description here

+0

Je suppose que je pensais à tort que debatching l'enveloppe qui est ce qui est reçu en retour ferait automatiquement sans boucles. Je vais définir comme vous l'avez indiqué merci pour l'aide –

+0

@ JWall Le débatchage se passe probablement dans l'emplacement de réception. Si vous voulez débatcher un message dans une orchestration, vous devez exécuter le pipeline dans l'orchestration ou utiliser XSLT, mais cela nécessitera toujours une boucle pour obtenir le message suivant. – Dijkgraaf

+0

Merci Je pense que j'ai vu quelques exemples d'utilisation du pipeline dans une orchestration, donc je pourrais d'abord regarder cette option.Très apprécié –

0

Je voulais juste poster une mise à jour sur ce problème que j'avais que je décidé d'utiliser la méthode Orchestration Pipeline et avait des problèmes de schéma. Pour corriger cela, j'ai dû

1 - Modifier mon message de réception et mon port sur le type de message System.Xml.XmlDocument au lieu de le définir sur mon schéma. Vous devez également définir le pipeline de réception sur PassTrhuReceive au lieu de XML Transmit. Depuis XML Transmit pipeline débogage automatiquement. Cela permet à ma boucle de traiter le débatchage dans l'orchestration comme je le voulais. J'utilisais un port http Send/Recieve et je pouvais le faire fonctionner

Un Gotcha sur ceci est que vous devez utiliser un Scope avec la méthode Pipeline d'Orchestration afin qu'il n'envoie pas le message comme je l'avais prévu à un le temps dans l'ordre. Dans l'une de mes orchestrations, j'ai aussi utilisé le convoi séquentiel pour traiter le message Envelope dans l'ordre, un à la fois. La première méthode fonctionnait bien pour résoudre le problème du message Zombie. avait. Comme j'ai déjà fait scinder cette opération en deux, j'ai fini par enregistrer l'Envelope dans un dossier, puis je l'ai récupéré et traité par convoi séquentiel.

Tout fonctionne comme prévu maintenant