次の方法で共有


公開済み WCF サービスでの SOAP ヘッダー

WCF 受信アダプターは、受信メッセージ内のすべての SOAP ヘッダー値を InboundHeaders プロパティにコピーすることも、指定した値を BizTalk メッセージ コンテキストに書き込んだり昇格させたりすることもできます。 WCF アダプタでは、カスタムの SOAP ヘッダーと、WCF インフラストラクチャが使用する WS-Addressing、WS-Security、WS-AtomicTransaction などの標準 SOAP ヘッダーの両方を処理できます。 InboundHeaders コンテキスト プロパティはターゲット名前空間 http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-propertiesにあり、受信メッセージの SOAP ヘッダー値の文字列表現が含まれています。

Note

指定した SOAP ヘッダーの値を昇格させる場合は、昇格対象の値に対応するプロパティ スキーマが、BizTalk プロジェクト内で展開されている必要があります。

Note

昇格されたプロパティの長さは 256 文字以下にしてください。

次の XML データは、 InboundHeaders プロパティの SOAP ヘッダーの文字列表現の例を示しています。 これはクライアントから渡されて、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>

SOAP ヘッダーの値を BizTalk メッセージ コンテキストに書き込む、または昇格させるには、プロパティ名と名前空間で構成される値ペアのコレクションを WCF メッセージに挿入することにより、ヘッダー値の書き込みまたは昇格を実行する必要があることを、WCF アダプタが認識できるようにする必要があります。 WCF アダプターで SOAP ヘッダーの値を BizTalk メッセージ コンテキストに書き込む、または昇格させるには、WCF メッセージで次のメッセージ プロパティを指定する必要があります。

  • SOAP ヘッダー値を BizTalk メッセージ コンテキストに昇格させるために、WCF アダプターはキーhttp://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promoteと値<のペア List KeyValuePair<XmlQualifiedName オブジェクトを探しています>>

    このペアを使用すると、WCF アダプターは XmlQualifiedName オブジェクトから名前空間、名前、および値を取得し、ヘッダー値を昇格するために使用します。

  • SOAP ヘッダー値を BizTalk メッセージ コンテキストに書き込むが昇格させないようにするために、WCF アダプターはキーhttp://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContextと値<のペア List KeyValuePair<XmlQualifiedName オブジェクトを探しています>>

    WCF アダプターは、このペアを使用して、値をメッセージ コンテキストに書き込みます。

    次のコードは、SOAP ヘッダーの値を 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;

BizTalk WCF サービス公開ウィザードで生成されたメタデータには、カスタム SOAP ヘッダーの定義が含まれません。 カスタム SOAP ヘッダーを使用して、WCF サービスにメタデータを公開するには、Web サービス記述言語 (WSDL) ファイルを手動で作成する必要があります。 ウィザードによって生成される Web.config ファイル内の <serviceMetadata 要素の externalMetadataLocation> 属性を使用して、WSDL ファイルの場所を指定できます。 この WSDL ファイルは、WSDL およびメタデータ交換 (MEX) 要求の応答として、自動生成された WSDL の代わりにユーザーに返されます。

次の XML データは、カスタム SOAP ヘッダーを定義する WSDL ファイルの一部を示しています。

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

このセクションの内容

参照

WCF アダプターのプロパティ スキーマとプロパティSOAP ヘッダーと使用済み WCF サービス