クライアント アプリケーションへの SOAP トレース サポートの追加

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

SQL Server のネイティブ XML Web サービス用の Web クライアント アプリケーションを開発する際に、トラブルシューティングを行うツールとして、SQL Server のインスタンスとクライアント アプリケーション間で交換される SOAP メッセージをトレースおよび監視する機能が役立ちます。

このトピックでは、SOAP 拡張機能ヘッダーを実装するサンプル クラス ライブラリについて説明します。この SOAP 拡張機能ヘッダーにより、Visual Studio 2005 内からクライアント アプリケーション プロジェクトの SOAP トレースがサポートされます。これらの拡張機能をプロジェクトに統合すると、SOAP 要求と応答のメッセージの実際のコンテンツがトレースおよび表示されます。

このライブラリは、既存の Visual Studio 2005 SOAP クライアント プロジェクトに追加できます。このライブラリには、「ネイティブ HTTP SOAP 要求を送信する場合のサンプル アプリケーション」に記載されているサンプル アプリケーションが含まれます。「ネイティブ XML Web サービス要求をリッスンするためのサーバーの設定」および「クライアント アプリケーションの作成」に記載されている概念や手順について詳しく理解しておくことをお勧めします。

また、SOAP メッセージの形式について詳しく理解していない場合は、次のトピックを参照してください。

注意

次の手順は、「Visual Studio 2005 クライアントを使用した SOAP 要求の送信 (C#)」で示すように、Visual Studio 2005 を使用して既存の SOAP クライアント アプリケーションを作成し、SQL Server を使用して作成した HTTP SOAP エンドポイントへの Web 参照を追加していることを前提としています。

Visual Studio プロジェクトに SOAP トレース サンプル ライブラリを追加するには

  1. SQL SOAP トレース サンプル クラス ライブラリの C# コード リスト」の内容をコピーしてメモ帳に貼り付け、"SqlSoapTracer.cs" という名前を付けて SOAP クライアント プロジェクト ファイルを含むフォルダと同じフォルダに保存します。

  2. クライアント コンピュータで、[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft Visual Studio 2005] の Microsoft Visual Studio 2005 を起動します。

  3. [プロジェクトを開く] をクリックします。

  4. SOAP クライアント プロジェクト (.csproj) ファイルを参照し、選択します。

  5. ソリューション エクスプローラで、次の手順を実行します。

    1. 名前でプロジェクトを選択し、選択したプロジェクトを右クリックします。次に、[追加] をポイントして [既存の項目の追加] をクリックします。

    2. [既存の項目の追加] ダイアログ ボックスで、手順 1. で SqlSoapTracer.cs ファイルを保存した場所を参照し、ファイルを選択します。

    3. [すべてのファイルを表示] をクリックし、[Web 参照] ノードを展開して、Reference.cs ファイルを選択します。

  6. コード エディタで、Web メソッドのエントリ ポイントを追加して、Reference.cs ファイルを更新します。

    たとえば、「Visual Studio 2005 クライアントを使用した SOAP 要求の送信 (C#)」で使用しているサンプル プロジェクトに SOAP トレース サポートを追加すると、そのプロジェクトに含まれているさまざまな Web メソッドの公開済みの Web メソッド エントリ ポイントは次のように表示されます。

                    public object[] GetCustomerInfo([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Data.SqlTypes.SqlString CustomerID, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] ref System.Data.SqlTypes.SqlString OutputParam) {
                object[] results = this.Invoke("s2MsgGetCustomerInfoSoapIn", new object[] {
                            CustomerID,
                            OutputParam});
                OutputParam = ((System.Data.SqlTypes.SqlString)(results[1]));
                return ((object[])(results[0]));
            }
    
    ...
    
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {
                object[] results = this.Invoke("s1MsgUDFReturningAScalarSoapIn", new object[0]);
                return ((System.Data.SqlTypes.SqlInt32)(results[0]));
            }
    
  7. クライアント コードで Web メソッドを実行するときに SOAP トレース サポートを追加するには、次のコード行に示すように、Reference.cs コード内のトレースする各 Web メソッドのエントリ ポイントの直前に、snoopattribute() 呼び出しを追加します。

                    [snoopattribute()]
    public object[] GetCustomerInfo(...) {...}
    ...
    [snoopattribute()]
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
    

    これにより、これらの Web メソッドが実行されるときに Web メソッドの SOAP トレースを開始する SOAP 拡張機能が登録されます。

SOAP トレース サポートを使用したアプリケーションのテスト

Visual Studio 開発環境で SOAP クライアント アプリケーションを実行するときに、上記のコードで示した SOAP トレース サポートの拡張機能を使用するには、次の手順を完了する必要があります。

  1. SQL Server Management Studio または osql コマンド ユーティリティを使用して Web メソッドを追加し、エンドポイントでテストするストアド プロシージャまたはユーザー定義関数を公開します。

    詳細については、「SQL プログラミング機能の Web への公開」を参照してください。

  2. まだであれば、Visual Studio で SOAP クライアント アプリケーション プロジェクトのコーディング、デバッグ、およびビルドを行います。

    必要に応じて、「Visual Studio 2005 クライアントを使用した SOAP 要求の送信 (C#)」に記載されているサンプル プロジェクトを使用できます。

  3. 前述のように、プロジェクトに SqlSoapTracer.cs クラスを追加します。

  4. Visual Studio 開発環境で、クライアント アプリケーションの保存、ビルド、および実行を行います。

    このアプリケーションを実行すると、Windows クリップボード ビューア オブジェクトが作成されます。手順 3. でトレースを有効にした Web メソッドを実行すると、このビューア オブジェクトにより Web メソッドごとに次のメッセージが表示されます。

    • クライアント コードで生成されたとおりの SOAP クライアント要求メッセージ。

    • SQL Server のネイティブ XML Web サービスから返されたとおりの SOAP サーバー応答メッセージ。

    トレース処理の実行後、クリップボードの内容を表示するには、現在の Windows クリップボードの内容をメモ帳に貼り付けます。

SOAP トレース サポートの機能方法

トレース メカニズムでは定義済みのコールバックとイベントが使用されます。この定義済みのコールバックとイベントは、SQL Server でネイティブ XML Web サービスの一部として実装されます。定義済みのイベントには、BeforeSerialize と AfterSerialize の 2 つがあります。

これらのイベントやコールバックにより、SOAP 要求と、その要求に対応するサーバーからの SOAP 応答をトラップして、出力ストリームにリダイレクトできます。記載したコードでは、出力が System.Windows.Forms.Clipboard オブジェクトにリダイレクトされます。Clipboard オブジェクトは、SOAP クライアント要求メッセージとサーバーからの応答メッセージを受信および表示します。snoopattribute() 呼び出しの直後に Web メソッドを実行すると、これらのメッセージが交換されます。

クライアント要求の出力と、その要求に応答して SQL Server から返される応答は、「SOAP 要求メッセージの構造」および「SOAP 応答メッセージの構造」に示しているような形式で表示されます。また、応答では、Web メソッドが正常に実行された場合にサーバーによって生成されるシリアル化された XML 出力などのすべての結果も表示されます。エラーが発生した場合は、サーバーから返される応答内に、シリアル化された XML 出力ではなく「SOAP エラー メッセージの構造」が表示されます。