實作事件通知
若要實作事件通知,您必須先建立目標服務來接收事件通知,然後建立事件通知。
重要事項 |
---|
您應該針對傳送訊息到遠端伺服器上 Service Broker 的事件通知,設定 Service Broker 對話安全性。 對話安全性必須根據完整安全性模型,以手動方式加以設定。 如需詳細資訊,請參閱<事件通知的對話方塊安全性>。 |
建立目標服務
您不必建立 Service Broker 起始服務,因為 Service Broker 包括下列特定訊息類型和事件通知的合約:
https://schemas.microsoft.com/SQL/Notifications/PostEventNotification
接收事件通知的目標服務必須遵照這項預先存在的合約。
若要建立目標服務:
建立要接收訊息的佇列。
[!附註]
佇列會接收下列訊息類型: https://schemas.microsoft.com/SQL/Notifications/QueryNotification。
在參考事件通知合約的佇列上建立服務。
在服務上建立路由,以定義要 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> 文字上建立事件通知,或在應用程式中建立邏輯,以避免擷取不想要的事件資料。 |
若要建立事件通知
若要卸除事件通知