ネイティブ XML Web サービス要求を送信する場合のサンプル アプリケーション

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

次の作業用サンプルは、SOAP 要求の送信方法と応答の処理方法を示すために用意されています。これらのサンプルには、C# と Visual Basic の両方の Visual Studio 2005 クライアントが含まれています。

初期セットアップ

サンプル アプリケーションはすべて共通のセットアップが必要です。このセットアップは、次の手順で行います。

  1. サンプル ストアド プロシージャを作成します。

  2. ユーザー定義関数を作成します。

  3. HTTP SOAP エンドポイントを作成します。

注意

AdventureWorks2008R2 サンプル データベースにこれらのオブジェクトを作成する場合は、SQL Server Management Studio または osql コマンド ユーティリティを使用できます。AdventureWorks2008R2 サンプル データベースのインストール方法については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

ストアド プロシージャ (GetCustomerInfo) の作成

次のストアド プロシージャは、クライアント アプリケーションが入出力パラメーター、リターン コード、クエリ結果、障害が発生した場合のエラーを処理する方法を示すことを目的に設計されています。

USE AdventureWorks2008R2;
GO
DROP PROCEDURE GetCustomerInfo;
GO
CREATE PROCEDURE GetCustomerInfo
                    @CustomerID nchar(5),
                    @OutputParam nchar(5) OUTPUT 
AS  

  SELECT @OutputParam = '99999'  
  -- The following INSERT should fail, and an-error returned 
  -- to the client.
  INSERT Store (CustomerID) VALUES (1)

 -- Execute a SELECT statement.
 SELECT top 3 SalesOrderID, OrderDate 
 FROM   Sales.SalesOrderHeader
 WHERE  CustomerID = @CustomerID

 -- Execute SELECT returning XML.
  SELECT CustomerID, SalesOrderID, OrderDate 
  FROM   Sales.SalesOrderHeader
  WHERE  CustomerID = @CustomerID
  for xml auto, XMLSCHEMA

  PRINT 'Hello World'
RETURN 0;
Go

このストアド プロシージャでは、入力パラメーター (CustomerID) と出力パラメーター (OutParam) の 2 つのパラメーターを使用して、パラメーターがどのように渡されるかを示しています。

このストアド プロシージャは、次のステートメントを実行します。

  • INSERT ステートメント。これは意図的に失敗し、エラーを返します。このエラーは、SOAP 応答でどのようにエラーが返されるかを示すための意図的なものです。Visual Studio 2005 では、エラーは SqlMessage オブジェクトとして返されます。

  • SELECT ステートメント。Visual Studio 2005 では、結果の行セットは DataSet オブジェクトとして返されます。

  • SELECT FOR XML クエリ。これは、XML データを返します。Visual Studio 2005 では、結果の行セットは SqlXml オブジェクトとして返されます。

  • PRINT ステートメント。Visual Studio 2005 では、この結果は SqlMessage オブジェクトとして返されます。

ユーザー定義関数 (UDFREturningAScalar) の作成

この関数は整数値を返します。

USE AdventureWorks2008R2;
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END;
Go

HTTP SOAP エンドポイント (sql_endpoint) の作成

このエンドポイントは、上記のストアド プロシージャとユーザー定義関数を Web メソッドとして公開します。また、このエンドポイントはアドホック クエリが許可されるように構成されます。クライアント アプリケーションは、アドホック クエリ用の SOAP 要求をこのエンドポイントに送信できます。

HTTP 名前空間 (sp_reserve_http_namespace) をエンドポイント用に予約し、同時に SITE パラメーターを使用するときは、hostname の値にサーバー名を指定する必要があることに注意してください。また、port の値は、SQL Server のインスタンスが使用する HTTP ポート ("80" など) か、その他の適切な TCP ポート番号に対応させる必要があります。

USE AdventureWorks2008R2;
GO
DROP ENDPOINT sql_endpoint;
GO
EXEC sp_reserve_http_namespace N'http://hostname:port/sql' ;
-- EXEC sp_reserve_http_namespace N'https://www.microsoft.com:80/sql' for example
GO
CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP(
   PATH = '/sql', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ),
   SITE = 'server'
)
FOR SOAP (
   WEBMETHOD 'http://tempUri.org/'.'GetCustomerInfo' 
            (name='AdventureWorks2008R2.dbo.GetCustomerInfo', 
             schema=STANDARD ),
   WEBMETHOD 'UDFReturningAScalar' 
            (name='AdventureWorks2008R2.dbo.UDFReturningAScalar'),
   BATCHES = ENABLED,
   WSDL = DEFAULT,
   DATABASE = 'AdventureWorks2008R2',
   NAMESPACE = 'http://Adventure-Works/Customers'
);
GO
USE master;
EXEC sp_grantlogin @loginame='domain\userOrGroup';
EXEC sp_grantdbaccess @loginame='domain\userOrGroup';
GRANT CONNECT ON ENDPOINT::sql_endpoint TO [domain\userOrGroup];
GO

上記のコードでは、次の点に注意してください。

  • このエンドポイントの作成では、2 つの Web メソッドが定義されています。

  • WSDL の値が、DEFAULT に設定されています。したがって、クライアントはサーバーからの WSDL 応答を要求できます。

  • BATCHES の値が、ENABLED に設定されています。したがって、クライアントはこのエンドポイントにアドホック クエリ要求を送信できます。

  • Web メソッド UDFReturningAScalar では、名前空間が指定されていません。名前空間の指定は省略できます。そのため、このメソッドでは NAMESPACE の値で指定された名前空間が使用されます。

  • SQL Server ログインとして作成される domain\userOrGroup の値には、HTTP エンドポイントへのアクセスに必要な実際のドメイン ユーザーまたはドメイン グループを設定する必要があります。