Teilen über


SOAP-Header mit veröffentlichten WCF-Diensten

Die WCF-Empfangsadapter können alle SOAP-Headerwerte in den eingehenden Nachrichten in die InboundHeaders-Eigenschaft kopieren, oder sie können angegebene Werte in den BizTalk-Nachrichtenkontext schreiben oder höherstufen. Die Adapter können nicht nur benutzerdefinierte SOAP-Header, sondern auch die SOAP-Standardheader verarbeiten, die in der WCF-Infrastruktur verwendet werden, wie z. B. WS-Addressing, WS-Security und WS-AtomicTransaction. Die InboundHeaders-Kontexteigenschaft befindet sich im Zielnamespace http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-propertiesund enthält Zeichenfolgendarstellungen der SOAP-Headerwerte in eingehenden Nachrichten.

Hinweis

Wenn Sie die von Ihnen angegebenen SOAP-Headerwerte höher stufen möchten, muss im BizTalk-Projekt ein Eigenschaftsschema bereitgestellt werden, das den Werten entspricht, die höher gestuft werden sollen.

Hinweis

Die höher gestuften Eigenschaften dürfen maximal 256 Zeichen lang sein.

Die folgenden XML-Daten zeigen ein Beispiel für die Zeichenfolgendarstellung der SOAP-Header für die InboundHeaders-Eigenschaft . Sie stammen vom Client und werden an den BizTalk-Empfangsspeicherort gesendet.

<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>

Wenn Sie SOAP-Headerwerte in den BizTalk-Nachrichtenkontext schreiben oder höher stufen möchten, müssen Sie eine Auflistung von Wertepaaren bestehend aus dem Eigenschaftsnamen und dem Namespace in die WCF-Nachricht einfügen, damit die WCF-Adapter die Headerwerte erkennen, die geschrieben oder höher gestuft werden sollen. Ein WCF-Adapter erwartet die folgenden Nachrichteneigenschaften in den WCF-Nachrichten zum Schreiben oder Höherstufen von SOAP-Headerwerten in den BizTalk-Nachrichtenkontext:

  • Um die SOAP-Headerwerte in den BizTalk-Nachrichtenkontext heraufzustufen, suchen WCF-Adapter nach dem Schlüsselpaar http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote und dem Wert List<KeyValuePair<XmlQualifiedName, Objekt>>.

    Mithilfe dieses Paars übernehmen WCF-Adapter den Namespace, den Namen und den Wert aus dem XmlQualifiedName-Objekt und verwenden sie zum Höherstufen der Headerwerte.

  • Um die SOAP-Headerwerte in den BizTalk-Nachrichtenkontext zu schreiben, aber nicht höherzustufen, suchen WCF-Adapter nach dem Schlüsselpaar http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext und dem Wert List<KeyValuePair<XmlQualifiedName, Objekt>>.

    Mithilfe dieses Paars schreiben die WCF-Adapter die Werte in den Nachrichtenkontext.

    Der folgende Code veranschaulicht, wie Sie die SOAP-Headerwerte in den BizTalk-Nachrichtenkontext schreiben oder höher stufen:

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;

Der Assistent für BizTalk WCF-Dienstpublishing fügt keine benutzerdefinierten SOAP-Headerdefinitionen in die generierten Metadaten ein. Wenn Sie Metadaten für WCF-Dienste veröffentlichen möchten, die benutzerdefinierte SOAP-Header verwenden, müssen Sie manuell eine WSDL-Datei (Web Services Description Language) erstellen. Sie können das externalMetadataLocation-Attribut des <serviceMetadata-Elements> in der vom Assistenten generierten Web.config-Datei verwenden, um den Speicherort der WSDL-Datei anzugeben. Diese WSDL-Datei wird dann anstelle der automatisch generierten WSDL-Datei als Reaktion auf WSDL- und Metadatenaustauschanforderungen (MEX) an den Benutzer zurückgegeben.

Die folgenden XML-Daten enthalten ein Beispiel für einen Teil einer WSDL-Datei zur Definition von benutzerdefinierten SOAP-Headern:

<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>

In diesem Abschnitt

Weitere Informationen

WCF Adapters-Eigenschaftenschema und EigenschaftenSOAP-Header mit verbrauchten WCF-Diensten