CREATE SERVICE (Transact-SQL)
新しいサービスを作成します。Service Broker サービスとは、特定のタスクまたはタスク セットの名前です。Service Broker ではサービスの名前を使用して、メッセージのルーティング、データベース内の正しいキューへのメッセージの配信、メッセージ交換のコントラクトの適用を行います。
構文
CREATE SERVICE service_name [ AUTHORIZATION owner_name ] ON QUEUE [ schema_name. ]queue_name [ ( contract_name | [DEFAULT] [ ,...n ] ) ] [ ; ]
引数
- service_name
作成するサービスの名前を指定します。新しいサービスは現在のデータベースで作成され、AUTHORIZATION 句で指定されるプリンシパルによって所有されます。サーバー名、データベース名、スキーマ名は指定できません。service_name は、有効な sysname データ型で指定する必要があります。
- AUTHORIZATION owner_name
サービスの所有者を、指定したデータベース ユーザーまたはロールに設定します。現在のユーザーが dbo または sa の場合、owner_name には、任意の有効なユーザーまたはロールの名前を指定できます。それ以外の場合、owner_name には、現在のユーザーの名前、現在のユーザーの IMPERSONATE 権限に対応するユーザーの名前、または現在のユーザーが所属するロールの名前を指定する必要があります。
- ON QUEUE [ schema_name**.** ] queue_name] queue_name
サービス用のメッセージを受信するキューを指定します。キューはサービスと同じデータベース内に存在する必要があります。schema_name を指定しない場合は、ステートメントを実行するユーザーに既定のスキーマが使用されます。
- contract_name
このサービスのコントラクトを指定します。サービス プログラムでは、指定したコントラクトを使用して、サービスに対するメッセージ交換が開始されます。コントラクトを指定しない場合、サービスではメッセージ交換が開始されるだけです。
- [DEFAULT]
サービスは、DEFAULT コントラクトに従ったメッセージ交換の発信先となります。この句のコンテキストでは、DEFAULT はキーワードとして扱われないため、識別子として区切り記号で区切る必要があります。DEFAULT コントラクトでは、メッセージ交換の両側で DEFAULT メッセージ型のメッセージを送信できます。DEFAULT メッセージ型では、検証は NONE となります。
解説
各サービスでは、関連付けられているコントラクトで提供される機能が、他のサービスでも使用できるよう公開されます。CREATE SERVICE ステートメントでは、サービスに対するコントラクトを指定できます。サービスは、指定されたコントラクトを使用するメッセージ交換の発信先となります。コントラクトを指定しないサービスの機能は、他のサービスに公開されません。
サービスで開始されるメッセージ交換では、任意のコントラクトを使用できます。サービスでメッセージ交換を開始するだけの場合は、コントラクトを指定しないでサービスを作成できます。
Service Broker でリモート サービスからの新しいメッセージ交換を受け入れるときには、発信先サービスの名前を基に、メッセージ交換のメッセージを格納するキューが決まります。
権限
サービスを作成する権限は、既定では db_ddladmin 固定データベース ロールまたは db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。CREATE SERVICE ステートメントを実行するには、指定したキューとすべてのコントラクトに対して REFERENCES 権限が必要です。
サービスに対する REFERENCES 権限は、既定ではサービスの所有者、db_ddladmin 固定データベース ロールまたは db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。サービスに対する SEND 権限は、既定ではサービスの所有者、db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。
サービスは一時オブジェクトとして指定できません。# で始まるサービス名は許可されますが、パーマネント オブジェクトになります。
例
A. 1 つのコントラクトでサービスを作成する
次の例では、dbo
スキーマの ExpenseQueue
キューにサービス //Adventure-Works.com/Expenses
を作成します。このサービスを対象とするダイアログは、コントラクト //Adventure-Works.com/Expenses/ExpenseSubmission
に従う必要があります。
CREATE SERVICE [//Adventure-Works.com/Expenses]
ON QUEUE [dbo].[ExpenseQueue]
([//Adventure-Works.com/Expenses/ExpenseSubmission]) ;
B. 複数のコントラクトでサービスを作成する
次の例では、ExpenseQueue
キューにサービス //Adventure-Works.com/Expenses
を作成します。このサービスを対象とするダイアログは、コントラクト //Adventure-Works.com/Expenses/ExpenseSubmission
またはコントラクト //Adventure-Works.com/Expenses/ExpenseProcessing
に従う必要があります。
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue
([//Adventure-Works.com/Expenses/ExpenseSubmission],
[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;
C. コントラクトなしでサービスを作成する
次の例では、サービス //Adventure-Works.com/Expenses
を ExpenseQueue
キュー上に作成します。このサービスにはコントラクト情報はありません。したがって、このサービスはダイアログの開始だけを行えます。
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;
参照
関連項目
ALTER SERVICE (Transact-SQL)
DROP SERVICE (Transact-SQL)
EVENTDATA (Transact-SQL)
その他の技術情報
Service Broker のチュートリアル
Service Broker アプリケーションの作成