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。[!附註]
請勿建立針對 service_name 使用關鍵字 ANY 的服務。當您在 CREATE BROKER PRIORITY 中針對服務名稱指定 ANY 時,就會考慮所有服務的優先權。這並不限於名稱為 ANY 的服務。
AUTHORIZATION owner_name
將服務的擁有者設為指定的資料庫使用者或角色。當目前的使用者是 dbo 或 sa 時,owner_name 可以是任何有效使用者或角色的名稱。否則,owner_name 必須是目前使用者的名稱、目前使用者有其 IMPERSONATE 權限的使用者名稱,或目前使用者所屬的角色名稱。ON QUEUE [ schema_name**.**] queue_name
指定接收服務訊息的佇列。佇列必須在服務的相同資料庫中。如果未提供 schema_name,結構描述就是執行陳述式的使用者之預設結構描述。contract_name
指定目標可以是這項服務的合約。服務程式會利用指定的合約來起始與這項服務的交談。如果未指定任何合約,服務就只能起始交談。[DEFAULT]
指定這項服務可以是遵照 DEFAULT 合約的交談目標。在這個子句的內容中,DEFAULT 不是關鍵字,必須用識別碼來分隔。DEFAULT 合約允許交談的兩端傳送訊息類型是 DEFAULT 的訊息。訊息類型 DEFAULT 所用的驗證是 NONE。
備註
服務會顯露相關合約所提供的功能,供其他服務使用。CREATE SERVICE 陳述式會指定目標是這項服務的合約。交談必須使用服務指定的合約,才能將這項服務設為目標。未指定合約的服務,不會向其他服務顯露任何功能。
這項服務所初始化的交談可以使用任何合約。當服務只要起始交談時,您便建立不指定任何合約的服務。
當 Service Broker 接受來自遠端服務的新交談時,目標服務的名稱會決定 Broker 將交談訊息放在其中的佇列。
權限
建立服務的權限預設為 db_ddladmin 或 db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。執行 CREATE SERVICE 陳述式的使用者必須有佇列及所有指定合約的 REFERENCES 權限。
服務的 REFERENCES 權限預設為服務的擁有者、db_ddladmin 或 db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。服務的 SEND 權限,預設為服務的擁有者、db_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。
服務不能是暫存物件。您可以使用開頭是 # 的服務名稱,但它們是永久物件。
範例
A. 建立含有一份合約的服務
下列範例會在 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. 建立不含任何合約的服務
下列範例會在 ExpenseQueue 佇列上建立 //Adventure-Works.com/Expenses 服務。這項服務沒有合約資訊。因此,這項服務只能是交談的起始端。
CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue ;