Visual Studio 2005 クライアントを使用した SOAP 要求の送信 (C#)

このトピックでは、Visual Studio 2005 クライアントが SQL Server 2005 のインスタンスに SOAP 要求を送信し、SOAP 応答を処理するサンプル アプリケーションについて説明します。要求は、「ネイティブ XML Web サービス要求を送信する場合のサンプル アプリケーション」で作成したエンドポイント メソッドに対して送信されます。

このアプリケーションを使用する場合、「ネイティブ XML Web サービス要求をリッスンするためのサーバーの設定」および「クライアント アプリケーションの作成」に記載されている概念や手順について詳しく理解しておくことをお勧めします。

ms180802.note(ja-jp,SQL.90).gifメモ :
このサンプル アプリケーションは、事前のセットアップが必要です。サンプル アプリケーションを使用した作業を続行する前に、「ネイティブ XML Web サービス要求を送信する場合のサンプル アプリケーション」に記載した手順を実行してください。

SOAP 要求の送信

このアプリケーションでは、SOAP 要求をエンドポイントに送信するために必要な、ボタンとテキスト ボックスを備えたフォームを作成します。

GetCustomerInfo ストアド プロシージャを要求する SOAP 要求が送信されると、テキスト ボックスに入力した顧客 ID の値が入力パラメータとして渡されます。テキスト ボックスに値を入力していない場合、空の文字列と見なされ、CustomerID 値が空文字列の顧客が返されます。NULL (または null) を入力すると、CustomerID が NULL の顧客が返されます。このとき、パラメータ値が NULL であることを示すための xsi:nil = 'true' 属性が SOAP 要求に自動的に追加されます。

GetCustomerInfo ストアド プロシージャは、入出力パラメータ、エラー メッセージ、および結果の処理方法を示すためにデザインされています。アプリケーションからはユーザー定義関数を要求する SOAP 要求も送信されます。その他、次のアドホック クエリを要求する SOAP 要求も送信されます。

  • すべての従業員を取得する SELECT クエリ。
  • 入力として渡した ID を持つ従業員を取得する SELECT クエリ。

SOAP 応答の処理

SOAP 要求の結果がオブジェクト配列として返された場合、クライアント アプリケーションでは配列内の各オブジェクトの種類が識別され、それに応じてオブジェクトが処理されます。その後、アプリケーションには、オブジェクト配列の各要素に関する次の情報が表示されます。

  • 配列要素の値のデータ型。
  • 値 (結果セット、リターン コード、出力パラメータの値など)。

作業用サンプルの作成

このサンプルを作成するには多くの手順が必要なので、アプリケーションを 5 個に分割します。

  • 作業 1: GetCustomerInfo ストアド プロシージャの実行
  • 作業 2: ストアド プロシージャの実行
  • 作業 3: パラメータを指定しない SQL クエリの実行
  • 作業 4: パラメータを指定した SQL クエリの実行
  • 作業 5: ユーザー定義関数の実行

それぞれの作業の手順を説明します。それぞれの作業が終了した時点で、アプリケーションをテストできます。

作業 1: GetCustomerInfo ストアド プロシージャの実行

  1. クライアント コンピュータで、[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft Visual Studio 2005] から Microsoft Visual Studio 2005 を起動します。
  2. [新しいプロジェクト] をクリックします。
  3. [プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックします。
  4. プロジェクト名を「NativeSOAPApp1」と指定します。
  5. プロジェクトの保存場所を指定します。
  6. [テンプレート] ボックスの一覧の [Windows アプリケーション] をクリックし、[OK] をクリックします。
  7. ソリューション エクスプローラで、[参照設定] を右クリックし、[Web 参照の追加] をクリックします。[プロジェクト] メニューの [Web 参照の追加] をクリックして Web 参照を追加することもできます。
  8. [アドレス] ボックスに「https://Server/sql?wsdl」と入力し、Enter キーを押します。サーバー名を URL で入力する必要があります。
  9. [参照の追加] をクリックします。この操作により、WSDL ドキュメント内でメソッドを呼び出すために必要なプロキシ クラスが作成されます。

作業 2: ストアド プロシージャの実行

  1. [表示] メニューの [ツールボックス] をクリックし、[Form1.cs [デザイン]] ペインにツールボックスを開きます。Ctrl+Alt+X キーを押してツールボックスを開くこともできます。
  2. Form1 に、テキスト ボックス (textBox1)、ボタン (button1)、およびリスト ボックス (listBox1) を追加します。
  3. テキスト ボックスを右クリックし、[プロパティ] をクリックします。Text の値を textBox1 から 1 に変更します。これは顧客 ID の既定値です。
  4. [button1] を右クリックし、[プロパティ] をクリックします。
    1. Text プロパティの値を button1 から ExecSP に変更します。
    2. (name) プロパティの値を ExecSP に変更します。
  5. リスト ボックス (listBox1) を右クリックし、[プロパティ] をクリックします。HorizontalScrollbar プロパティの値を True に変更します。
  6. [ExecSP] をダブルクリックします。
  7. ExecSP の C# コード リスト」のコードをこの関数にコピーします。
  8. コードを更新します。server への参照を、CREATE ENDPOINT を使用してエンドポイントを作成したときに指定したホスト名に変更します。
  9. プロジェクトを保存してコンパイルします。詳細については、前の「コードのコンパイル」を参照してください。

作業 3: パラメータを指定しない SQL クエリの実行

この作業では、AdventureWorks データベースの Employee テーブルから、従業員を取得するためのアドホック クエリ (FOR XML クエリ) をクライアント アプリケーションで実行します。

  1. Form1 の [デザイン] タブで、別のボタン (button1) を追加します。
  2. 新しいボタンを右クリックし、[プロパティ] をクリックします。
    1. Text プロパティの値を button1 から BatchQueryFindAllEmps に変更します。
    2. (name) プロパティの値を BatchQueryFindAllEmps に変更します。
  3. [BatchQueryFindAllEmps] をダブルクリックします。
  4. BatchQueryFindAllEmps の C# コード」のコードをこの関数にコピーします。
  5. コードを更新します。server への参照を、CREATE ENDPOINT を使用してエンドポイントを作成したときに指定したホスト名に変更します。
  6. プロジェクトを保存してコンパイルします。詳細については、前の「コードのコンパイル」を参照してください。

作業 4: パラメータを指定した SQL クエリの実行

この作業は、アドホック クエリの SOAP 要求にクエリ パラメータが含まれている点を除き、前の作業と同じです。FOR XML クエリで、指定した従業員 ID の従業員についての情報を取得します。

  1. Form1 の [デザイン] タブで、ボタン (button1) を追加します。
  2. 新しいボタンを右クリックし、[プロパティ] をクリックします。
    1. Text プロパティの値を button1 から BatchQueryFindAnEmp に変更します。
    2. (name) プロパティの値を BatchQueryFindAnEmp に変更します。
  3. [BatchQueryFindAnEmp] をダブルクリックします。
  4. BatchQueryFindAnEmp の C# コード リスト」のコードをこの関数にコピーします。
  5. コードを更新します。server への参照を、CREATE ENDPOINT を使用してエンドポイントを作成したときに指定したホスト名に変更します。
  6. プロジェクトを保存してコンパイルします。詳細については、前の「コードのコンパイル」を参照してください。

作業 5: ユーザー定義関数の実行

この作業では、クライアント アプリケーションから UDFReturningScalar Web メソッドの SOAP 要求を送信します。この Web メソッドは、整数値を返すユーザー定義関数に対応します。

  1. Form1 の [デザイン] タブで、ボタン (button1) を追加します。
  2. 新しいボタンを右クリックし、[プロパティ] をクリックします。
    1. Text プロパティの値を button1 から ExecUDFReturningScalar に変更します。
    2. (name) プロパティの値を ExecUDFReturningScalar に変更します。
  3. [ExecUDFReturningScalar] をダブルクリックします。
  4. ExecUDFReturningScalar の C# コード リスト」のコードをこの関数に追加します。
  5. コードを更新します。server への参照を、CREATE ENDPOINT を使用してエンドポイントを作成したときに指定したホスト名に変更します。
  6. プロジェクトを保存してコンパイルします。詳細については、前の「コードのコンパイル」を参照してください。
  7. [ExecUDFReturningScalar] をクリックします。ユーザー定義関数の戻り値がリスト ボックスに表示されます。

エンドポイントでは統合認証が指定されているので、コードには "proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;" と記述されます。

SQL Server 認証を使用する場合は、この行を削除し、SQL Server 認証の資格情報を指定するために WS-Security ヘッダーを実装するコードで置き換えることをお勧めします。詳細については、「SOAP 経由の SQL 認証」を参照してください。

ms180802.note(ja-jp,SQL.90).gifメモ :
SQL Server 認証または基本認証のいずれかを使用している場合、SQL Server 2005 ではユーザーの資格情報をセキュリティで保護し暗号化した通信を行うために、通信内容をクリア テキストとして表示できない SSL (Secure Sockets Layer) を使用する必要があります。HTTP エンドポイントで SSL を使用できるようにする方法の詳細については、「SSL に使用する証明書の構成」を参照してください。

コードのコンパイル

SQL Server 2005 をインストールすると、インストール処理の一部として Microsoft .NET Framework 2.0 がインストールされます。次のコンパイル手順では、最新の .NET Framework を使用します (\WINDOWS\Microsoft.NET\Framework フォルダで最も番号が大きいバージョンです)。

サンプル コードをコンパイルするには

  1. プロジェクト全体を保存します。
  2. コマンド プロンプトを開き、プロジェクトが保存されているフォルダに移動します。
  3. このフォルダから、Web Reference\Server サブフォルダの Reference.cs ファイルをコピーします (たとえば、"Web Reference\Server\Reference.cs" をコピーします)。Form1.cs ファイルおよび Reference.cs ファイルを同一のフォルダに配置します。
  4. コードをコンパイルして、実行可能 (.exe) ファイルの名前を指定します。たとえば、実行可能ファイルの名前が NativeSOAPApp1.exe である場合、コマンド ラインに次のように入力します。
    \WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe /out:NativeSOAPApp1.exe Form1.cs Reference.cs
    xxxxx は、.NET Framework のバージョンに相当するフォルダ番号です。
    このコマンドを実行すると、カレント ディレクトリに実行可能ファイル (NativeSOAPApp1.exe) が作成されます。
ms180802.note(ja-jp,SQL.90).gifメモ :
以前のバージョンの .NET Framework を使用している場合、ランタイム エラーが発生することがあります。エラーが発生する場合、次のように SELECT ステートメントの末尾に FOR XML AUTO 句を追加することで、GetCustomerInfo ストアド プロシージャを更新してください。
SELECT TOP 3 SalesOrderID, OrderDate 
FROM   SalesOrderHeader
WHERE  CustomerID = @CustomerID
FOR XML AUTO

ストアド プロシージャの実行結果がリスト ボックスに表示されます。

参照

関連項目

ネイティブ XML Web サービス要求をリッスンするためのサーバーの設定
SOAP の要求メッセージと応答メッセージの構造
ネイティブ XML Web サービス要求を送信する場合のサンプル アプリケーション
ネイティブ XML Web サービスのガイドラインと制限事項

概念

ネイティブ XML Web サービスを使用する際の推奨事項

その他の技術情報

クライアント アプリケーションの作成

ヘルプおよび情報

SQL Server 2005 の参考資料の入手