ネイティブ XML Web サービス要求をリッスンするためのサーバーの設定

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

HTTP SOAP 要求をネイティブにリッスンできる Web サービスとして SQL Server のインスタンスを設定するには、HTTP エンドポイント (URL 名前空間) の作成とそのプロパティの定義、およびエンドポイントを公開するメソッドが必要です。

SQL Server で使用するために作成される HTTP エンドポイントは、Microsoft IIS (インターネット インフォメーション サービス) で World Wide Web サービス用に使用されているのと同じ TCP ポート (ポート 80) で、要求をリッスンし、受信することができます。これは、SQL Server で使用するか IIS で使用するかにかかわらず、システム HTTP リスナ プロセス (Http.sys) で使用するように、各 URL が Windows Server 2003 オペレーティング システムに登録されるためです。

たとえば、URL http://MyServer/My endpoint を指定して、エンドポイントを作成したとします。次に、このエンドポイントが Http.sys に登録されます。SOAP 要求がこのエンドポイントに送信されると、まず、URL (MyServer) で識別されるサーバーに要求が転送されます。サーバー上の Http.sys 層では要求の受信時に、URL の残りの部分と登録済みのエンドポイントが比較されて、SQL Server のインスタンスに要求が直接転送され、IIS はバイパスされます。また、インターネット サービス マネージャ (Inetmgr.exe) コンソールを使用して、http://MyServer/MyVDir など、異なる URL を持つ IIS の HTTP エンドポイントに相当する仮想ディレクトリを作成できます。

エンドポイントの作成と管理

エンドポイントを作成および管理するには、次の Transact-SQL ステートメントを使用します。

  • CREATE ENDPOINT

    エンドポイントの作成、クライアント アプリケーションが HTTP SOAP 要求をエンドポイントに送信できるようにするメソッドの定義、認証の設定とポートの指定に使用します。

  • ALTER ENDPOINT

    メソッドの追加、削除、変更、またはエンドポイント オプションの変更に使用します。

  • DROP ENDPOINT

    不要なエンドポイントまたは古いエンドポイントの削除に使用します。

エンドポイントの権限と認証

HTTP エンドポイントを作成、変更、または削除するには、権限が必要です。エンドポイントにアクセスするには、認証が必要です。これらの要件については次の各トピックを参照してください。

Web へのプログラミング機能

ストアド プロシージャまたはユーザー定義関数を公開するには、次のトピックを参照してください。

既定の実行環境

既定では、SQL Server でのネイティブ XML Web サービスへの HTTP SOAP 要求は、次の表に一覧する設定で実行されます。

  • SET ANSI_NULL_DFLT_ON ON
    データベースの ANSI NULL の既定のオプションが FALSE の場合、新しい列の NULL 値許容の既定値が上書きされます。詳細については、「SET ANSI_NULL_DFLT_ON (Transact-SQL)」を参照してください。

  • SET QUOTED_IDENTIFIER ON
    識別子を二重引用符で囲むことができ、リテラルは単一引用符で囲む必要があります。詳細については、「SET QUOTED_IDENTIFIER (Transact-SQL)」を参照してください。

  • SET NUMERIC_ROUNDABORT OFF
    有効桁数が失われてもエラー メッセージが生成されず、結果を格納する列または変数の有効桁数に丸められます。詳細については、「SET NUMERIC_ROUNDABORT (Transact-SQL)」を参照してください。

  • SET ARITHABORT ON
    クエリ実行中にオーバーフローや 0 除算エラーが発生すると、クエリやバッチが終了します。詳細については、「SET ARITHABORT (Transact-SQL)」を参照してください。

  • SET ANSI_WARNINGS ON
    SUM や AVG などの集計関数に NULL 値が指定されると、警告メッセージが生成されます。詳細については、「SET ANSI_WARNINGS (Transact-SQL)」を参照してください。

  • SET ANSI_NULLS ON
    等価 (=) 演算子または非等価 (<>) 演算子を使用した NULL 値に対する比較が評価され、FALSE が返されます。詳細については、「SET ANSI_NULLS (Transact-SQL)」を参照してください。

  • SET CONCAT_NULL_YIELDS_NULL ON
    NULL 値を文字列と連結すると、結果が NULL になります。詳細については、「SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)」を参照してください。

  • SET ANSI_PADDING ON
    定義済みの列サイズよりも小さい値が格納された場合、列サイズの不足部分に値が埋め込まれます。char、varchar、binary、および varbinary 型のデータの末尾に空白文字がある列の場合、末尾の空白文字またはゼロは削除されません。詳細については、「SET ANSI_PADDING (Transact-SQL)」を参照してください。

  • SET CURSOR_CLOSE_ON_COMMIT ON
    トランザクションがコミットまたはロールバックされるときに、開いているカーソルが閉じられます。詳細については、「SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)」を参照してください。

  • SET IMPLICIT_TRANSACTIONS OFF
    既定では、HTTP SOAP セッションのトランザクションが正常終了した場合、個別のステートメントがすべてコミットされる、自動コミット モードで動作します。詳細については、「SET IMPLICIT_TRANSACTIONS (Transact-SQL)」を参照してください。

HTTP SOAP サービスのクラスタ フェールオーバーに関する注意点

SQL Server をインストールする際には、ドメイン アカウントを SQL サービス アカウントとして使用し、ローカル コンピュータに対する完全な管理者権限をアカウントに与えないようにすることをお勧めします。これは、SQL Server を Windows クラスタ上の仮想サーバーとして設定する場合に影響します。SQL HTTP-SOAP ネイティブ サービスの構成については、いくつかの注意事項があります。

SQL Server は Windows Server 2003 の HTTP ドライバを利用します。この HTTP リスナは、SQL Server と IIS サービスがインストールされた Windows プラットフォームの HTTP サービスにサブスクライブしているすべてのアプリケーションに要求をルーティングするように設計されています。アプリケーションがこのサービスをサブスクライブするには、HTTP API を呼び出して、名前空間とも呼ばれるアプリケーション固有のルート URL を予約する必要があります。この予約は、HTTP ドライバに対し、ルート URL からの以降のすべての要求を、サブスクライブしたアプリケーションにルーティングするように通知します。これらの HTTP API に対する呼び出しは、ローカルの Windows 管理者権限を持つアカウントのコンテキストで行う必要があります。SQL Server 2005 以降のバージョンでは、sp_reserve_http_namespaces と呼ばれる特別なストアド プロシージャによってこれらの呼び出しが行われます (詳細については、「HTTP 名前空間の予約」を参照してください)。このストアド プロシージャは、Windows HTTP ドライバがルーティングを実行できるように、ルート URL と SQL サービス アカウントの間にバインドを作成します。SQL サービス アカウントにローカル マシンの管理者権限がない場合は、このアカウントの代わりに Windows のローカル管理者アカウントを使用して、ストアド プロシージャを呼び出す必要があります。この名前空間を登録したら、SQL SOAP エンドポイントをルート URL の下に作成することで、以降の HTTP 要求をリダイレクトできます。クラスタ設定では、Windows のローカル管理者がいずれかのノード上でこの HTTP 名前空間を予約する必要があります。これにより、いずれかのノードにフェールオーバーが発生した場合でも、SQL Server への要求が HTTP サービスによりルーティングされるようになります。

SQL Server および HTTP-SOAP でのクラスタ フェールオーバーに関するもう 1 つの注意事項は、暗号化証明書を使用して SSL チャネル経由で要求を送信する場合です。詳細については、「SSL に使用する証明書の構成」を参照してください。クラスタ環境では、各ノード上で証明書を設定する必要があります。これらの証明書の件名は、仮想サーバー名の完全修飾名として設定する必要があります。HTTP 経由の Kerberos 認証を確実に設定するには、「Http.sys を使用した Kerberos サービス プリンシパル名の登録」を参照してください。これはクラスタにも適用されます。