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 値を integer や float などの型 (値型) のパラメータに渡すと、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 |
パラメータの方向 (Input、InputOutput) を指定します。既定値は 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 応答で使用される名前空間