Share via


CREATE SERVICE (Transact-SQL)

建立新的服務。Service Broker 服務是一項特定工作或一組工作的名稱。Service Broker 會利用服務的名稱來遞送訊息,將訊息傳送到資料庫內的正確佇列,以及強制使用交談的合約。

主題連結圖示Transact-SQL 語法慣例

語法

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
    將服務的擁有者設為指定的資料庫使用者或角色。當目前的使用者是 dbosa 時,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_ddladmindb_owner 固定資料庫角色的成員,以及系統管理員 (sysadmin) 固定伺服器角色的成員。執行 CREATE SERVICE 陳述式的使用者必須有佇列及所有指定合約的 REFERENCES 權限。

服務的 REFERENCES 權限預設為服務的擁有者、db_ddladmindb_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 ;