次の方法で共有


公開された WCF サービスを使用した SOAP ヘッダー

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>

このセクションにて

こちらもご覧ください

WCF アダプターのプロパティ スキーマとプロパティSOAP ヘッダーと消費される WCF サービス