次の方法で共有


SOAP 要求メッセージの構造

Visual Studio 2005 で用意されているプロキシ クラスを使用するのではなく、独自の SOAP 要求を SOAP クライアントで作成する場合は、以下のメッセージ形式に従う必要があります。

ストアド プロシージャとユーザー定義型用の SOAP 要求メッセージ形式

次のサンプルでは、SQL Server 2005 のインスタンスに送信される一般的な SOAP 要求を示します。この SOAP メッセージでは GetCustomerInfo 操作を要求しています。ここでは、HTTP ヘッダーの一部だけを示していることに注意してください。

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 350
SoapAction: http://tempUri.org/GetCustomerInfo
...

<?xml version="1.0" encoding="utf-8" ?> 
<soap:Envelope 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
   <GetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID> 
<OutputParam /> 
  </GetCustomerInfo>
</soap:Body>
</soap:Envelope>

HTTP ヘッダー

上記のコードの SoapAction HTTP ヘッダー フィールドの値はメソッド名です。メソッド名の前には名前空間が指定されています。この値は、CREATE ENDPOINT を使用して作成されたエンドポイントに追加したものと同じメソッドと名前空間です。このフィールドは省略できます。Host HTTP ヘッダー フィールドにより、HTTP 要求の送信先サーバーが特定されます。

<soap:Envelope> 要素

SOAP 要求の詳細は、SOAP エンベロープ内の <Body> 要素に含まれます。上記の例では、GetCustomerInfo メソッドを要求しています。<GetCustomerInfo> 内の xmlns 属性には、CREATE ENDPOINT を使用してエンドポイントを作成した、このメソッドに指定したものと同じ名前空間を指定します。ストアド プロシージャと名前空間の詳細については、「ネイティブ XML Web サービス要求を送信する場合のサンプル アプリケーション」を参照してください。次のメソッド パラメータが <GetCustomerInfo> 要素の子要素に渡されます。

  • <CustomerID> 要素。これは入力パラメータで、値 1 を保持します。
  • <OutputParam> 要素。これは出力パラメータです。

入力パラメータの処理

入力パラメータは次のように処理されます。

  • SOAP メソッドに入力パラメータが必要で、そのパラメータが SOAP 要求に含まれていない場合は、呼び出し先のストアド プロシージャに値が渡されません。その場合は、ストアド プロシージャで定義されている既定のアクションが実行されます。

  • SOAP メソッドに入力パラメータが必要で、このパラメータが SOAP 要求に含まれていても値が割り当てられていない場合は、空の文字列を値として含むパラメータがストアド プロシージャに渡されます。NULL ではありません。

  • SOAP メソッドに入力パラメータが必要で、そのパラメータに NULL 値を送信する場合は、SOAP 要求の xsi:nil 属性を "true" に設定する必要があります。次に例を示します。

    <GetCustomerInfo xmlns="http://tempUri.org/" >
      <CustomerID xsi:nil="true" />
      <OutputParam />
    </GetCustomerInfo>
    

    Visual Studio 2005 では NULL 値を文字列変数に渡すと、SOAP 要求に xsi:nil="true" が生成されます。ただし、NULL 値を integerfloat などの型 (値型) のパラメータに渡すと、xsi:nil="true" 属性が生成されず、代わりに、Visual Studio 2005 によってそれらのパラメータに既定値が指定されます。たとえば、integer 型には 0、float 型には 0.0 が指定されます。したがって、そのようなパラメータに NULL 値を渡す場合は、xsi:nil="true" を使用してアプリケーション内で SOAP メッセージを作成する必要があります。詳細については、「ネイティブ XML Web サービスのガイドラインと制限事項」を参照してください。

  • パラメータには複数のファセットを指定できます。このトピックの後半では、アドホック SQL クエリを要求するときに指定できるファセットをいくつか示します。その表で、<Value> ノードに指定できるファセットは、すべて RPC メソッド パラメータ ノードに指定できます。

アドホック SQL クエリを要求する際の SOAP 要求メッセージ形式

アドホック SQL クエリを実行するために SOAP 要求を送信する場合、sqlbatch メソッドを呼び出して、クエリと要求できるすべてのパラメータを渡す必要があります。

次のサンプルの HTTP SOAP 要求では、sqlbatch メソッドを呼び出します。ここでは、HTTP ヘッダーの一部だけを示していることに注意してください。

POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 656
SoapAction: https://schemas.microsoft.com/sqlserver/2004/SOAPsqlbatch
...

<?xml version="1.0" encoding="utf-8" ?> 
 <soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
 <sqlbatch xmlns="https://schemas.microsoft.com/sqlserver/2004/SOAP">
<BatchCommands>
SELECT EmployeeID, FirstName, LastName 
FROM Employee 
WHERE EmployeeID=@x 
FOR XML AUTO;
</BatchCommands> 
<Parameters>
   <SqlParameter Name="x" SqlDbType="Int" MaxLength="20" 
   xmlns="https://schemas.microsoft.com/SQLServer/
    2001/12/SOAP/types/SqlParameter">
  <Value xsi:type="xsd:string">1</Value> 
   </SqlParameter>
</Parameters>
  </sqlbatch>
  </soap:Body>
  </soap:Envelope>

HTTP ヘッダー

HTTP ヘッダーでは、SoapAction HTTP ヘッダー フィールド値がメソッド名 (sqlbatch) です。これは、SQL クエリを指定するためにクライアントで使用されます。このヘッダーは省略できます。

<soap:Envelope> 要素

SOAP 要求の詳細は、<Body> 要素内に示されます。SOAP <Body> 要素には子要素 (<sqlbatch>) が 1 つだけあり、要求されるメソッドがこの子要素で特定されます。この要素で特定される名前空間は、sqlbatch メソッドが定義されている場所です。この要素には次の子要素があります。

  • <BatchCommands> 要素。この要素では、実行するクエリ、またはセミコロン (;) で区切られた複数のクエリを指定します。
  • <Parameters> 要素。パラメータのリストを指定します。このリストは、省略できます。上記の要求のエンベロープ例では、クエリに渡されるパラメータが 1 つだけ含まれています。各パラメータは、<Parameters> 要素の <SqlParameter> 子要素として SOAP メッセージに追加されます。パラメータを渡す際は、最低でもパラメータ名 (<SqlParameter> 要素の Name 属性) とパラメータ値 (<SqlParameter> 要素の <Value> 子要素) を渡す必要があります。

必要外の変換が行われないようにするには、できるだけ多くのパラメータ情報を指定します。<SqlParameter> に指定できる追加パラメータ ファセットを次の表に示します。また、これらのファセットの一部を <Value> 要素に指定することもできます。

<SqlParameter> 要素と <Value> 要素の両方で指定できるファセットの場合は、次の例に示すように、<Value> 要素の指定時にそれらのファセットに https://schemas.microsoft.com/sqlserver/2004/sqltypes 名前空間を指定する必要があります。

<Value xsi:type="xsd:string" sqltypes:maxLength="100" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes">1</Value>
パラメータ ファセット 解説 指定できるノード

direction

パラメータの方向 (InputInputOutput) を指定します。既定値は Input です。

<SqlParameter>

localeID

文字型の照合順序の Windows ロケールを定義します。COLLATIONPROPERTY によって返される固有の LCID に相当します。

<SqlParameter>

<Value>

maxLength

<SqlParameter> 要素の属性で、パラメータ値の最大長を指定します。既定値は 1 です。

<SqlParameter>

<Value>

name

<SqlParameter> 要素の属性で、パラメータ名を指定します。

<SqlParameter>

outputRequested

出力を行う必要があるかどうかを示すためにパラメータ要素に適用できます。既定の動作は、使用している parameterMode が明示的か既定かによって異なります。

入力パラメータでこの属性を "true" に設定すると、エラーが発生します。

<Value>

precision

<SqlParameter> 要素の属性で、パラメータ値の有効桁数を指定します。既定値は 18 です。

<SqlParameter>

<Value>

scale

<SqlParameter> 要素の属性で、パラメータ値の小数点以下桁数を指定します。既定値は 0 です。

<SqlParameter>

<Value>

sqlCompareOptions

文字型の照合順序に使用する比較オプションを定義します。これは、COLLATIONPROPERTY によって返される固有の ComparisonStyle 値と一致する値を列挙したもので、組み合わせて使用できます。

<SqlParameter><Value>

sqlDbType

パラメータの型を指定します。SQL Server 2005 のシステム データ型の一覧については、「ネイティブ XML Web サービスでのデータ型マッピング」を参照してください。

<SqlParameter>

typeName

ユーザー定義型の引数を指定するために使用します。typeName には、3 つの部分で構成される名前を指定する必要があります。

<SqlParameter>

<Value>

useDefaultValue

既定値をパラメータに使用する必要があることを示します。このパラメータ要素はリストから省略することも、ブール属性 useDefaultValue に値 "true" を設定して指定することもできます。この属性の既定値は、要素が含まれている場合は "false" であり、要素が省略されている場合は "true" です。

<SqlParameter>

<Value>

XmlNamespace

xml 型パラメータに関連付けられる XML スキーマ名前空間を指定します。

<SqlParameter>

<Value>

xsi:type

値型を指定します。xsi:type ファセットと SQL Server 2005 システムデータ型とのマッピングの詳細については、「ネイティブ XML Web サービスでのデータ型マッピング」を参照してください。

<Value>

参照

関連項目

SOAP の要求メッセージと応答メッセージの構造
SOAP 拡張ヘッダー
SOAP 応答メッセージの構造
SOAP エラー メッセージの構造
SOAP 要求と SOAP 応答で使用される名前空間

ヘルプおよび情報

SQL Server 2005 の参考資料の入手