取得通知
許多應用程式不需包含程式碼,就能接收或處理查詢通知。當通知訂閱由 SqlDependency 物件管理時,該物件會自動監視訂閱。當通知訊息到達時,SqlDependency 物件會呼叫在 SqlDependency 物件中註冊的事件處理常式。透過使用此方法,將不需要執行特殊的工作即能接收通知。使用 SqlDependency 的應用程式並不需要接收或處理通知訊息。
相對的,如果應用程式使用通知要求,應用程式必須監視佇列並對通知訊息做出反應。在此情況下,您可以撰寫一個應用程式,以處理接收通知的服務之訊息。要求通知的應用程式有可能是處理訊息的相同應用程式,或是您可以撰寫另一個應用程式來接收並對查詢通知訊息做出反應。
SQL Server 追蹤通知訂閱是使用通知識別碼與實際提交的查詢之組合。如果應用程式對使用相同通知識別碼的兩個不同查詢要求通知,SQL Server 會建立兩個具有相同通知識別碼的訂閱。然而,如果應用程式為具有相同通知識別碼的相同查詢,要求了兩次的通知,SQL Server 會建立在第二個要求中指定逾時的單一訂閱。
在資料庫中執行的應用程式通常是在訊息到達時,由佇列啟動的預存程序。這些預存程序可以使用 Transact-SQL 或其中一種 .NET 語言來撰寫。一般比較不常使用的方法包含以排程作業執行應用程式,或使用啟動工作以便在背景連續執行預存程序。
在資料庫外面執行的應用程式通常會使用下列其中一種方法來接收訊息:
- 應用程式可以定期輪詢佇列以查詢訊息是否已到達。
- 應用程式可以使用 RECEIVE 陳述式的 WAITFOR 子句,以封鎖在 RECEIVE 陳述式上執行批次或預存程序,直到陳述式至少傳回一個資料列。
- 應用程式可以在接收通知的佇列上建立 QUEUE_ACTIVATION 事件的事件通知。應用程式可以使用前面兩個策略的其中之一,來監視接收啟動事件的服務。
較不常使用的方法包含使用 WMI 來監視佇列啟動,或撰寫 Common Language Runtime (CLR) 預存程序以採取某些外部動作來回應訊息。
因為查詢通知對話永遠都包含單一通知訊息,所以處理查詢通知的應用程式必須在收到訊息後結束交談。否則,對話最後會變成逾時的狀態。查詢通知對話逾時時,SQL Server 會在 SQL Server 錯誤記錄中記錄對話逾時錯誤。
如需有關使用 Service Broker 撰寫應用程式的詳細資訊,請參閱<Introduction to Service Broker Programming>。如需有關如何使用 Service Broker 啟動應用程式的詳細資訊,請參閱<Choosing a Startup Strategy>。