SOAP メッセージの形式は WSDL 定義で記述されるため、ブローカーはその WSDL と、実行時に SOAP メッセージを構文解析するために使用するメッセージ・モデルの間でマップする必要があります。 このトピックの目的は、WSDL とメッセージ・モデルの主要な関係を強調することです。
WSDL 定義の物理部分はブローカー・モデルでは表現されません。そのため、WSDL 操作、メッセージ、および部分定義だけを考慮する必要があります。 WSDL 定義は、低レベルの構築ブロックから始めて、以下の事柄を記述します。
WSDL 生成プログラムは、メッセージ・カテゴリーを使用して、必要な WSDL 操作を定義します。 しかし、ブローカー・メッセージ・モデルでは、メッセージ・カテゴリーは実行時には重要でないので、WSDL のインポート時に作成されません。
メッセージ・カテゴリーとブローカー・メッセージ・モデルの関係は、以下の WSDL スタイルに依存します。
<soap:Body> の単一の子は rpc (関数) 呼び出しを表し、rpc ラッパーまたはアクセサーと呼ばれます。 rpc アクセサーの名前は WSDL 操作名から与えられ、そのネーム・スペースは <soap:body> 定義の名前属性から与えられます。これは rpc スタイルでのみ使用されます。 rpc アクセサーの子は rpc 呼び出しのパラメーターを表します。 子エレメントの名前は、対応する WSDL メッセージ定義からのパーツ名から与えられます。 これらは rpc アクセサーに対してローカルであり、ネーム・スペースを持ちません。
SOAP ヘッダーおよび障害を rpc スタイルのメッセージと結合して使用することができます。しかし、これらは rpc スタイルのパラメーターにマップしないため、WS-I Basic Profile により文書スタイルを使用するように求められます。
交換されるメッセージは、XML スキーマによって完全に記述されます (リテラル・エンコードのみ許可されます)。 SOAP メッセージのパーツは、WSDL オブジェクト (操作およびパーツ名など) から派生しません。
WS-I Basic Profile は、文書スタイルのメッセージが本体部分を 1 つしか持たないように指定します。 SOAP-ENV:Header エレメントは複数の子エレメント (ヘッダー・ブロック) を持つことができます。 障害詳細メッセージは単一の WSDL メッセージ部分によって定義されます。
個々のケースで、エレメント・スキーマは WSDL メッセージ部分定義で参照されるエレメントによって定義され、エレメントを定義する <schema> の targetNamespace に属します。
生成されるモデルにより、ユーザーは MRM XML パーサーを使用して着信 SOAP メッセージを構文解析します。この場合に、メッセージ・タイプは「エンベロープ」です。 SOAP エンベロープ用のメッセージ・モデルは、外部 SOAP ラッパーとそれを構成するヘッダーおよび本文セクション、および様々なビジネス・ペイロードが見られる多数の添付ポイントを定義します。 そのような添付ポイントは構成「メッセージ」を用いて定義され、WSDL インポーターまたは生成プログラムが作成するブローカー・メッセージをそれらのポイントで表示することができます。
以下の表は、添付ポイントと、各ポイントで可能な添付物を示します。
WSDL スタイル | ||
---|---|---|
添付ポイント | rpc | 文書 |
Envelope.Body | 単一の操作アクセサー | 単一の子を持つ必要がある |
Envelope.Header | 複数の子 (重複を含む) を持てる | 複数の子 (重複を含む) を持てる |
Envelope.Body.Fault.detail | 単一の子を持つ必要がある | 単一の子を持つ必要がある |