公開済み 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>