Partager via


En-têtes SOAP avec les services WCF publiés

Les adaptateurs de réception WCF peuvent copier toutes les valeurs d’en-tête SOAP dans les messages entrants dans la propriété InboundHeaders , ou écrire ou promouvoir des valeurs spécifiées dans le contexte de message BizTalk. Les adaptateurs peuvent utiliser les en-têtes SOAP personnalisés et les en-têtes SOAP standard utilisés par l'infrastructure WCF, tels que WS-Addressing, WS-Security et WS-AtomicTransaction. La propriété de contexte InboundHeaders se trouve dans l’espace de noms http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-propertiescible et contient des représentations sous forme de chaîne des valeurs d’en-tête SOAP dans les messages entrants.

Notes

Si vous souhaitez promouvoir les valeurs d'en-tête SOAP que vous avez spécifiées, un schéma de propriété correspondant à ces valeurs doit être déployé dans votre projet BizTalk.

Notes

Ces propriétés promues peuvent inclure jusqu'à 256 caractères.

Les données XML suivantes montrent un exemple de représentation sous forme de chaîne des en-têtes SOAP pour la propriété InboundHeaders . Transmises par le client, elles sont envoyées à l'emplacement de réception BizTalk.

<headers>
<a:Action s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">Operation_1</a:Action>
<SalesAgent xmlns="Microsoft.Samples.BizTalk.WCF.CustomSoapHeaderPipeline">Contoso</SalesAgent>
<a:MessageID xmlns:a="http://www.w3.org/2005/08/addressing">urn:uuid:26e6720f-5a82-4ef2-b597-6ef077bab92e</a:MessageID>
<a:ReplyTo xmlns:a="http://www.w3.org/2005/08/addressing"><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo>
<a:To s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">net.tcp://localhost:9990/NetTcpOrderProcess</a:To>
</headers>

Pour écrire ou promouvoir des valeurs d'en-tête SOAP dans le contexte du message BizTalk, vous devez placer un ensemble de paires de valeurs constituées d'un nom de propriété et d'un espace de noms dans le message WCF afin que les adaptateurs WCF reconnaissent que les valeurs d'en-tête doivent être écrites ou promues. Un adaptateur WCF attend les propriétés suivantes dans les messages WCF pour écrire ou promouvoir les valeurs d'en-tête SOAP dans le contexte du message BizTalk :

  • Pour promouvoir les valeurs d’en-tête SOAP dans le contexte de message BizTalk, les adaptateurs WCF recherchent la paire de clé http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote et de valeur List<KeyValuePair<XmlQualifiedName, objet>>.

    À l’aide de cette paire, les adaptateurs WCF prennent l’espace de noms, le nom et la valeur de l’objet XmlQualifiedName et les utilisent pour promouvoir les valeurs d’en-tête.

  • Pour écrire, mais pas promouvoir les valeurs d’en-tête SOAP dans le contexte de message BizTalk, les adaptateurs WCF recherchent la paire de clé http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext et de valeur List<KeyValuePair<XmlQualifiedName, objet>>.

    À l'aide de cette paire, les adaptateurs WCF écrivent les valeurs dans le contexte du message.

    Le code suivant illustre la méthode utilisée pour écrire ou promouvoir les valeurs d'en-tête SOAP dans le contexte du message BizTalk :

const string PropertiesToPromoteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote";
const string PropertiesToWriteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext";

XmlQualifiedName PropName1=new XmlQualifiedName("Destination", "http://tempuri.org/2007/sample-properties");
XmlQualifiedName PropName2=new XmlQualifiedName("Source", "http://tempuri.org/2007/sample-properties");

//Create a List of KeyValuePairs that indicate properties to be promoted to BizTalk message context.
//A Property Schema must be deployed and string values have a limit of 256 characters
List<KeyValuePair<XmlQualifiedName, object>> promoteProps=new List<KeyValuePair<XmlQualifiedName, object>>();
promoteProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName1, "Property value"));
wcfMessage.Properties[PropertiesToPromoteKey]=promoteProps;

//Create a List of KeyValuePairs that indicate properties to be written to BizTalk message context
List<KeyValuePair<XmlQualifiedName, object>> writeProps=new List<KeyValuePair<XmlQualifiedName, object>>();
writeProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName2, "Property value"));
wcfMessage.Properties[PropertiesToWriteKey]=writeProps;

L'Assistant Publication de services WCF BizTalk n'inclut pas de définitions d'en-tête SOAP personnalisées dans les métadonnées générées. Pour publier des métadonnées pour les services WCF à l'aide d'en-têtes SOAP personnalisés, vous devez créer manuellement un fichier WSDL (Web Services Description Language). Vous pouvez utiliser l’attribut externalMetadataLocation de l’élément <serviceMetadata> dans le fichier Web.config généré par l’Assistant pour spécifier l’emplacement du fichier WSDL. Ce dernier est renvoyé à l'utilisateur en réponse aux demandes WSDL et MEX (Metadata Exchange), au lieu du fichier WSDL généré automatiquement.

Les données XML suivantes montrent un exemple de la partie du fichier WSDL qui définit les en-têtes SOAP personnalisés :

<wsdl:operation name="Request">
  <soap12:operation soapAction="http://Microsoft.Samples.BizTalk.NetTcpAdapter/OrderProcess/IOrderProcess/Request" style="document" />
   <wsdl:input name="Order">
     <soap12:header message="i0:Order_Headers" part="SalesAgent" use="literal" />
     <soap12:body use="literal" />
   </wsdl:input>
   <wsdl:output name="OrderConfirmation">
     <soap12:header message="i0:OrderConfirmation_Headers" part="PaymentAgent" use="literal" />
     <soap12:body use="literal" />
   </wsdl:output>
</wsdl:operation>

Dans cette section

Voir aussi

Schéma de propriété d’adaptateurs WCF eten-têtes SOAP de propriétés avec les services WCF consommés