WCF 受信アダプターは、受信メッセージ内のすべての SOAP ヘッダー値を InboundHeaders プロパティにコピーすることも、指定した値を BizTalk メッセージ コンテキストに書き込んだり昇格させたりすることもできます。 アダプターは、カスタム SOAP ヘッダーと、WCF インフラストラクチャが使用する標準の SOAP ヘッダー (WS-Addressing、WS-Security、WS-AtomicTransaction など) の両方を操作できます。
InboundHeaders コンテキスト プロパティは、ターゲット名前空間http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties
にあり、受信メッセージの SOAP ヘッダー値の文字列表現を含みます。
注
指定した SOAP ヘッダー値を昇格させる場合は、昇格する値に対応する展開済みのプロパティ スキーマが BizTalk プロジェクトに存在する必要があります。
注
昇格されたプロパティは、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、object>> のペアを探します。このペアを使用すると、WCF アダプターは XmlQualifiedName オブジェクトから名前空間、名前、および値を取得し、ヘッダー値を昇格するために使用します。
SOAP ヘッダー値を書き込むが、BizTalk メッセージ コンテキストに昇格しないようにするために、WCF アダプターはキー
http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext
と値 List<KeyValuePair<XmlQualifiedName、object>> のペアを探しています。このペアを使用して、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 ではなく、WSDL およびメタデータ交換 (MEX) 要求に応答してユーザーに返されます。
次の 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>