Partager via


Spécification du corps de message pour les adaptateurs WCF

Vous pouvez utiliser l’onglet Messages dans les adaptateurs WCF pour spécifier comment le corps du message BizTalk est extrait d’un message SOAP entrant et comment le corps du message BizTalk est placé dans un message SOAP sortant.

Spécification de la manière dont le corps du message BizTalk est extrait d'un message SOAP entrant

Vous pouvez contrôler la création du corps du message BizTalk entrant à partir de messages SOAP entrant par l'intermédiaire d'adaptateurs WCF. Les figures suivantes illustrent les onglets Messages de l’adaptateur de réception WCF-NetNamedPipe et de l’adaptateur d’envoi à titre d’exemples.

L’onglet Messages dans les adaptateurs de réception WCF

Onglet Messages dans les adaptateurs d’envoi WCF

Pour spécifier comment créer le corps du message BizTalk, sélectionnez l’une des options suivantes dans la section Corps du message BizTalk entrant dans les figures précédentes :

  • Enveloppe : savon entier <: enveloppe>. Utilise l’élément Enveloppe SOAP d’un message entrant pour créer le corps du message BizTalk. La totalité du message entrant devient le corps du message BizTalk. Utilisez cette option pour créer le corps du message BizTalk incorporant tous les en-têtes.

    Notes

    Les en-têtes SOAP sont placés dans le contexte de message, mais ils ne sont pas promus automatiquement. La promotion peut être effectuée dans un composant de pipeline personnalisé.

  • Body -- contenu de l’élément <soap :Body>. Utilise le contenu de l’élément CORPS SOAP d’un message entrant pour créer le composant corps du message BizTalk. Si l’élément Body a plusieurs éléments enfants, seul le premier élément devient le corps du message BizTalk.

  • Chemin d’accès : contenu situé par chemin d’accès au corps. Utilise l’expression de chemin de corps dans la zone de texte Expression de chemin d’accès au corps pour créer la partie corps du message BizTalk. L’expression de chemin de corps est évaluée par rapport à l’élément enfant immédiat de l’élément SOAP Body d’un message entrant. Lorsque des messages entrants ont des données binaires, vous pouvez utiliser cette option pour que le corps du message BizTalk inclue uniquement les données binaires sans balise.

    Lorsque l’option Chemin d’accès -- contenu situé par chemin d’accès au corps est sélectionnée, la propriété d’encodage node peut être configurée pour spécifier le type d’encodage attendu pour le nœud spécifié par l’expression de chemin d’accès du corps dans la zone de texte Expression du chemin d’accès au corps . Si l'expression du chemin du corps correspond à plusieurs éléments, seul le premier élément correspondant est utilisé.

Notes

Pour la propriété d’expression de chemin d’accès au corps , seules les expressions XPath appropriées pour le traitement avant uniquement du XML sont prises en charge. Pour plus d’informations sur les expressions XPath disponibles pour cette propriété, consultez « The Best of Both Worlds : Combining XPath with the XmlReader » sur https://go.microsoft.com/fwlink/?LinkID=75701.

Si l’option Chemin d’accès -- contenu situé par chemin d’accès au corps est sélectionnée et que la propriété d’encodage du nœud a la valeur String, les adaptateurs WCF s’attendent à ce que le nœud correspondant possède des données de caractères encodées en UTF-8. Si les messages entrants incluent des données de caractères d’échappement pour les caractères spéciaux XML tels que < et >, les adaptateurs WCF restaurent les données de caractères d’échappement lors de la création du composant corps du message BizTalk. Par exemple, si le nœud correspondant contient des données de caractères d’échappement telles que <FirstName>CONTOSO</FirstName> , les adaptateurs WCF créent <FirstName>CONTOSO</FirstName> dans le corps du message BizTalk entrant.

Si l’option Chemin d’accès -- contenu situé par chemin d’accès au corps est sélectionnée et que la propriété d’encodage node est définie sur Hexadécimal ou Base64, le nœud correspondant peut avoir une séquence BinHex ou Base64 valide. Si le nœud mis en correspondance a une séquence non valide, le client WCF reçoit FaultException, un message d’erreur est enregistré dans le journal des événements sur votre ordinateur BizTalk Server et aucun message n’est suspendu.

Si l’option Chemin d’accès -- contenu situé par chemin d’accès au corps est sélectionnée et que la propriété d’encodage du nœud est définie sur XML, les adaptateurs WCF créent le corps du message BizTalk avec le code XML externe du nœud sélectionné par l’expression de chemin de corps dans la zone de texte Expression du chemin d’accès au corps.

Si le nœud mis en correspondance n’a pas de données encodées comme spécifié dans la propriété d’encodage node , un corps de message BizTalk entrant vide est créé.

Par exemple, supposons que les adaptateurs d'envoi WCF reçoivent le message SOAP suivant de clients WCF :

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/OrderRefresh</a:Action>
    <a:MessageID>urn:uuid:59e74507-66d0-4d50-be70-c3ec248b6f78</a:MessageID>
    <a:ReplyTo>
       <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Order xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
     <OrderDetail>
       <CustomerID>CONTOSO</CustomerID>
       <OrderID>00000000</OrderID>
     </OrderDetail>
    </Order>
  </s:Body>
</s:Envelope>

Si vous configurez la section Corps du message BizTalk entrant comme indiqué dans le tableau suivant, le message SOAP entrant précédent devient la partie du corps du message BizTalk entrant.

Corps du message BizTalk entrant Expression du chemin du corps Codage de nœud
Enveloppe -- savon entier < :Enveloppe> N/A N/A

Si vous configurez la section corps du message BizTalk comme indiqué dans le tableau suivant, les adaptateurs WCF créent le corps du message BizTalk entrant pour contenir uniquement l’élément Order dans le message SOAP entrant précédent.

Corps du message BizTalk entrant Expression du chemin du corps Codage de nœud
Body -- contenu de l’élément <soap :Body> N/A N/A

Si vous configurez la section corps du message BizTalk , comme indiqué dans le tableau suivant, les adaptateurs WCF s’attendent à ce que le nœud entrant auquel correspond l’expression de chemin d’accès du corps ait des données de caractères encodées en UTF-8.

Corps du message BizTalk entrant Expression du chemin du corps Codage de nœud
Chemin -- contenu localisé par le chemin du corps /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] Chaîne

Pour le message SOAP entrant précédent, les adaptateurs WCF utilisent les données de caractères CONTOSO de l’élément CustomerID pour créer le composant de corps du message BizTalk entrant.

Notes

Vous ne pouvez pas utiliser la syntaxe abrégée de XPath, /Order/OrderDetail/CustomerID, pour le message SOAP entrant précédent. En effet, la syntaxe abrégée de XPath retourne le nœud non déclaré dans un espace de noms, et l’élément CustomerID dans le message SOAP précédent est déclaré dans l’espace http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess de noms par défaut.

Si vous configurez la section Corps du message BizTalk comme indiqué dans le tableau suivant, l’élément CustomID du message SOAP entrant précédent doit avoir une séquence BinHex ou Base64 valide.

Corps du message BizTalk entrant Expression du chemin du corps Codage de nœud
Chemin -- contenu localisé par le chemin du corps /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] Hexadécimal ou Base64

Si vous configurez la section corps du message BizTalk comme indiqué dans le tableau suivant, les adaptateurs WCF créent le corps du message BizTalk entrant pour le message SOAP entrant précédent, comme indiqué dans le code après le tableau.

Corps du message BizTalk entrant Expression du chemin du corps Codage de nœud
Chemin -- contenu localisé par le chemin du corps /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] XML
<CustomerID xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">CONTOSO</CustomerID>

Spécification de la source du corps du message WCF sortant

Vous pouvez contrôler la création du corps du message BizTalk sortant à partir d'un corps de message BizTalk à envoyer par l'intermédiaire d'adaptateurs WCF. Pour spécifier la façon dont le corps du message BizTalk est placé dans le corps du message WCF sortant, vous pouvez utiliser l’une des options suivantes dans la section Corps du message WCF sortant sous l’onglet Messages , comme indiqué dans les figures de la section précédente :

  • Corps : corps du message de réponse BizTalk. Utilise la partie corps du message BizTalk pour créer le contenu de l’élément CORPS SOAP pour un message sortant. Le corps du message BizTalk sortant devient le corps du message SOAP sortant.

  • Modèle : contenu spécifié par le modèle. Utilise le modèle fourni dans la zone de texte XML pour créer le contenu de l’élément SOAP Body pour un message sortant. Les adaptateurs WCF avec corps -- l’option Corps du message de réponse BizTalk (valeur par défaut) n’autorisent pas l’envoi de messages non XML, tels que des données de caractères et des images bitmap. Vous pouvez utiliser l’option Modèle -- contenu spécifié par modèle pour les adaptateurs WCF afin d’envoyer des messages non XML encodés en base64, hexadécimal ou chaîne.

    Lorsque l’option Modèle -- contenu spécifié par le modèle est sélectionnée, vous devez fournir un élément XML de modèle arbitraire dans la zone de texte Corps du message WCF sortant - XML . L’élément XML de modèle doit contenir l’élément bts-msg-body suivant une fois et une seule fois, sauf si l’élément XML de modèle est laissé vide :

<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="[base64|hex|string|xml]"/>

Les adaptateurs WCF encodent le corps du message BizTalk en fonction de l’attribut d’encodage dans le modèle XML, puis remplacent l’élément bts-msg-body par le corps du message BizTalk encodé lors de la création de messages WCF sortants. Si la zone de texte Corps du message WCF sortant - XML est laissée vide, les adaptateurs WCF encodent le corps du message BizTalk dans Base64, puis placent la séquence Base64 dans le corps du message SOAP sortant.

Si l’attribut d’encodage dans le modèle XML est défini sur chaîne, les adaptateurs WCF encodent le corps du message BizTalk sous forme de données de caractères encodées UTF-8, dans lesquelles les caractères spéciaux XML tels que < et > sont placés dans une séquence d’échappement.

Si l’attribut d’encodage dans le modèle XML est défini sur base64 ou hexadécimal, les adaptateurs WCF encodent le composant corps du message BizTalk sous la forme d’une séquence BinHex ou Base64 .

Si l’attribut d’encodage dans le modèle XML est défini sur xml, les adaptateurs WCF remplacent l’élément bts-msg-body par le corps de message BizTalk sortant pour créer le message WCF sortant.

Par exemple, supposons que les adaptateurs WCF doivent envoyer le corps du message BizTalk suivant à des clients WCF :

<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>

Si vous configurez la section corps du message WCF sortant , comme indiqué dans le tableau suivant, les adaptateurs WCF créent les messages WCF sortants, comme indiqué dans le code après le tableau.

Corps du message WCF sortant XML
Corps -- corps du message de réponse BizTalk N/A
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:6a706a54-c4f5-4767-909d-a992c7c26dba</a:MessageID>
    <a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
  </s:Body>
</s:Envelope>

Si vous configurez la section corps du message WCF sortant , comme indiqué dans le tableau suivant, les adaptateurs WCF créent les messages WCF sortants, comme indiqué dans le code après le tableau.

Corps du message WCF sortant XML
Corps -- corps du message de réponse BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="string"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:05dde292-eedd-467e-b0d2-f1b8f0757410</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <Book><ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">  <ns0:OrderDetail>    <ns0:CustomerID>CONTOSO</ns0:CustomerID>    <ns0:OrderID> 01A2c</ns0:OrderID>  </ns0:OrderDetail></ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>

Si vous configurez la section corps du message WCF sortant , comme indiqué dans le tableau suivant, les adaptateurs WCF créent les messages WCF sortants, comme indiqué dans le code après le tableau.

Corps du message WCF sortant XML
Corps -- corps du message de réponse BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="base64"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://ww
w.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe
/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:cb3cac6d-a542-4a90-bad8-cdbfa8251112</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessSer
vice</a:To>
  </s:Header>
  <s:Body>
    <Book>77u/PG5zMDpPcmRlciB4bWxuczpuczA9Imh0dHA6Ly9NaWNyb3NvZnQuU2FtcGxlcy5CaX
pUYWxrLk5ldE5hbWVkUGlwZS9PcmRlclByb2Nlc3MiPg0KICA8bnMwOk9yZGVyRGV0YWlsPg0KICAgID
xuczA6Q3VzdG9tZXJJRD5DT05UT1NPPC9uczA6Q3VzdG9tZXJJRD4NCiAgICA8bnMwOk9yZGVySUQ+MD
FBMmM8L25zMDpPcmRlcklEPg0KICA8L25zMDpPcmRlckRldGFpbD4NCjwvbnMwOk9yZGVyPg==</Book
>
  </s:Body>
</s:Envelope>

Si vous configurez la section corps du message WCF sortant , comme indiqué dans le tableau suivant, les adaptateurs WCF créent les messages WCF sortants, comme indiqué dans le code après le tableau.

Corps du message WCF sortant XML
Corps -- corps du message de réponse BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="xml"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:A
ction>
    <a:MessageID>{513C123C-0600-4A1C-BEE2-EF83E0EFEB15}</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Book>
      <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CustomerID_0</ns0:CustomerID>
    <ns0:OrderID>OrderID_0</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>