特集:後編 準備が整ったSQL Server 2005Visual Studio Magazine(2/3 ページ)

» 2004年11月16日 18時29分 公開
[Roger Jennings,FTPOnline]

HTTPエンドポイントを作る、WS-Securityサポート

 T-SQLの追加機能で、最も論争の的になっているのは、サーバに対してHTTP URL名前空間をマッピングする「HTTPエンドポイント機能」だろう。HTTPエンドポイントを構成するには、「CREATE ENDPOINT」を用いる。

 HTTPエンドポイントは、Windows 2003 ServerやWindows XP SP2でSQL Server 2005が動作している場合に限り利用可能だ。HTTPエンドポイントでは、URLをHttp.sysに登録することで、TCPポートの80番や443番(SSL/TLS)に到来した外部リクエストを受信できるようにする。

 この機能は、SQLXML 3.0を使ってSOAP Webサービスを作る方法に似ている。しかし、HTTPエンドポイントは([訳注]単純なリクエストのフックであり)、IIS上で実行されるのではないという点が異なる。SOAP応答メッセージを返すには、ALTER WEB METHODを使って、ストアドプロシージャやユーザー定義関数を実行して返すように設定すればよい。

 この時、認証方式として「BASIC(基本認証)」「DIGEST(ダイジェスト認証)」「INTEGRATED(Windows認証)」を指定できる。また、「COMPRESSION ENABLED」を使うことで、クライアントがgzipによる圧縮を要求しているならば、その要求を受け入れて圧縮したデータを返すようにすることもできる。

 ベータ2では、ユーザー名とパスワードの認証に、WS-Securityのヘッダを使うこともできる。WS-Securityによる認証を使うには、LOGIN_TYPE=MIXEDのように変更し、暗号化するために、SSL上で動かすようにすればよい。

 ところで、Books OnlineのCREATE ENDPOINTのトピックにあるT-SQLサンプルでは、AdventureWorksの現行版のサンプルに含まれていない「サービスポイント(SP)」と「ユーザー定義関数(UDF)」を必要とする。そのため実際に試すには、「Initial Setup for Native HTTP SOAP Sample Applications」というトピックにあるサービスポイントとユーザー定義関数を作成するためのスクリプトを事前に実行しておく必要がある。

 そのほかの方法としては、LISTENER_PORTを定義したTSQLを実行してTCPエンドポイントを作り、SERVICDE_BLOKERやDATABASE_MIRRORINGをSOAPペイロードの代わりに使うこともできるのだ。そうとはいえ、現在の疎結合システムの主流はXML Webサービスなので、SOAPペイロードを使うのが一般的だろう。

 ITマネージャやデータベース管理者は、SOAP Webサービスを使ったデータベースアクセスは、ほかのデータベースアクセス方法に比べて、重いと感じるに違いない。事実、SOAPリクエストとレスポンスを作成するためには、T-SQLクエリよりも、ずっと多くのCPUリソースを消費する。特に大きなサイズのレスポンスの場合はなおさらだ。インプロセスのWebサービスでは、CPUやメモリを増設することで増強できるものの、複数のサーバに分散してのスケールアウトはできない。

 複数のサーバに負荷分散してスケールアウトを図りたい場合には、IIS 6.0のWebガーデン機能を使ってASP.NETのWebサービスとして実行するのが良い。複数のサーバを構成する際には、Windows 2003 Server Web Editionを使うとよいだろう。

 ベータ2のBooks Onlineには、ほぼ完全な追加された機能や修正された機能に関するT-SQLのキーワードが含まれている。ただしベータ2では、新しい暗号化機能に関するトピックは含まれていない。SQL Server 2005の新機能である「Service Broker」は、同じインスタンスのデータベースもしくは別のローカルまたはリモートのインスタンスの間で、信頼性の高い非同期のメッセージングサービス機能を提供する。

 Service Brokerは、Microsoft Message Queue(MSMQ)を単純化した、インプロセスで動作するサービスだ。データベースは、関連する一連のメッセージを永続化する。そのため、再起動やフェイルオーバーしても残り、バックアップ中で保存される。

 Service Brokerにおいては、(ネットワークアドレスではなく)インスタンスごとに独立したサービス名が、アプリケーションが通信するときの経路を決める指定子となる。

 Service Brokerサービスは、「メッセージタイプ」「コントラクト」「キュー」「サービス」の4つの項目で構成される。

Service Brokerを使ったプログラミング手法

 データベースエンジンサンプルのServiceBrokerグループに含まれている「HelloWorld」は、Service Brokerのプログラミングを学ぶのに格好の材料だ。このHelloWorldは、3つのT-SQLスクリプトを含むManagement Studioのプロジェクトとして構成されている。

 スクリプトは、AdventureWorksデータベース中の配信メッセージをアクティブにすることで、InitiatorServiceからTargetServiceまでXMLメッセージを送信し、グリッドにその届けられたメッセージを表示する。EventLoggingサンプルプロジェクトは、NotifyServiceとCreateDatabaseEventNotificationを作成する。そして、NotifyServiceにDDLイベントメッセージを送信する。

 2つのサンプルを実行したら、オブジェクトブローカに接続し、AdventureWorksの[Service Broker]ツリーを表示させてみよう。すると、その下に[メッセージタイプ(Message Types)][コントラクト(Contracts)][キュー(Queues)][サービス(Services)][ルート(Routes)]というサブツリーが作成されたことを確認できるはずだ。

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ