Share via


實作事件通知

若要實作事件通知,您必須先建立目標服務來接收事件通知,然後建立事件通知。

重要事項重要事項

您應該針對傳送訊息到遠端伺服器上 Service Broker 的事件通知,設定 Service Broker 對話安全性。 對話安全性必須根據完整安全性模型,以手動方式加以設定。 如需詳細資訊,請參閱<事件通知的對話方塊安全性>。

建立目標服務

您不必建立 Service Broker 起始服務,因為 Service Broker 包括下列特定訊息類型和事件通知的合約:

https://schemas.microsoft.com/SQL/Notifications/PostEventNotification

接收事件通知的目標服務必須遵照這項預先存在的合約。

若要建立目標服務

  1. 建立要接收訊息的佇列。

    [!附註]

    佇列會接收下列訊息類型: https://schemas.microsoft.com/SQL/Notifications/QueryNotification。

  2. 在參考事件通知合約的佇列上建立服務。

  3. 在服務上建立路由,以定義要 Service Broker 將該服務的訊息傳送到哪一個位址。 如果事件通知是以相同資料庫中的服務為目標,請指定 ADDRESS = 'LOCAL'。

    [!附註]

    Service Broker 路由會判斷要接收通知訊息的服務。 如果事件通知是以遠端伺服器的服務為目標,則來源伺服器和目標伺服器上都必須要定義路由,以確保可以進行雙向通訊。 如需詳細資訊,請參閱<Service Broker 路由>。

下列範例會建立佇列、佇列上的服務及服務上的路由,以處理來自事件通知合約的訊息:

CREATE QUEUE NotifyQueue ;
GO
CREATE SERVICE NotifyService
ON QUEUE NotifyQueue
(
[https://schemas.microsoft.com/SQL/Notifications/PostEventNotification]
);
GO
CREATE ROUTE NotifyRoute
WITH SERVICE_NAME = 'NotifyService',
ADDRESS = 'LOCAL';
GO

如需有關如何建立 Service Broker 目標服務的詳細資訊,請參閱<使用 Service Broker 進行程式設計的優點>。

建立事件通知

事件通知是使用 Transact-SQL CREATE EVENT NOTIFICATION 陳述式建立,並使用 DROP EVENT NOTIFICATION STATEMENT 卸除。 若要修改事件通知,您必須先卸除再重新建立事件通知。

下列範例會建立事件通知 CreateDatabaseNotification。 當伺服器上發生任何 CREATE_DATABASE 事件時,這個通知會傳送此訊息給先前建立的 NotifyService 服務。

CREATE EVENT NOTIFICATION CreateDatabaseNotification
ON SERVER
FOR CREATE_DATABASE
TO SERVICE 'NotifyService', '8140a771-3c4b-4479-8ac0-81008ab17984' ;
警告注意事項注意

事件通知以不同事件來辨識 CREATE_SCHEMA 事件和 CREATE SCHEMA 陳述式的 <schema_element> 定義。 例如,對 CREATE_SCHEMA 和 CREATE_TABLE 事件建立事件通知,且您執行下列批次。

CREATE SCHEMA s

CREATE TABLE t1 (col1 int)

在此案例中,事件通知引發了兩次:一次是在 CREATE_SCHEMA 事件發生時,一次只在 CREATE_TABLE 事件發生時。我們建議您避免在 CREATE_SCHEMA 事件和任何對應 CREATE SCHEMA 定義的 <schema_element> 文字上建立事件通知,或在應用程式中建立邏輯,以避免擷取不想要的事件資料。

若要建立事件通知

若要卸除事件通知