· 返回到應(yīng)用程序的信息也不過是“something changed”。該應(yīng)用程序并不被通知改變了什么(請參考本文中的SQLNotificationEventArgs一節(jié)了解更多的信息)。
· 盡管依賴性被綁定到從查詢中返回的行上;但是,它并不被查詢中的單個列加以過濾。如果你有一個查詢—它返回你的組織的基本成員姓名以及那些單個改變之一的地址(但是,其姓名并不改變),這將觸發(fā)一個改變通知。很希望,這種特殊行為在未來的版本中會有所改變。
· 通知被返回,通過一個專門針對這一目的建立的SqlConnection。這個連接并不加入連接池中。
三. 何時使用查詢通知
查詢通知是針對于并不經(jīng)常改變的數(shù)據(jù)而設(shè)計的。最好把它應(yīng)用于服務(wù)器端的應(yīng)用程序(例如ASP.NET或remoting)而不是客戶端應(yīng)用程序(例如Windows表單應(yīng)用程序)。記住,每一個通知請求都要在SQL Server中注冊。如果你擁有大量的都有通知請求的客戶端應(yīng)用程序,那么這可能會導(dǎo)致你的服務(wù)器產(chǎn)生資源問題。微軟推薦,對于客戶端應(yīng)用程序,你應(yīng)該限制查詢通知使用為不多于十個并行用戶。
對于大規(guī)模應(yīng)用程序來說,查詢通知可能是一種強(qiáng)有力的幫助,而不用簡單地添加越來越多的服務(wù)器以滿足要求。設(shè)想,有一家大型的為成千上百萬用戶提供在線軟件更新服務(wù)的軟件公司。不是使每一個用戶的更新操作都觸發(fā)服務(wù)器上的另一個查詢來確定需要哪些組件,而是能夠緩沖查詢結(jié)果并且可以直接從該緩存中服務(wù)匹配的查詢。
注意:對于客戶端應(yīng)用程序來說,應(yīng)該限制你的查詢通知使用—不多于十個并發(fā)用戶。
對于較小規(guī)模的情況而言,下拉式列表框是另一種典型的數(shù)據(jù)集;此時該數(shù)據(jù)集更新的次數(shù)并不如請求的次數(shù)多。產(chǎn)品列表、州列表、國家列表、供應(yīng)商、銷售人,甚至更多不太需要頻繁改變的信息正是使用通知的較好候選。
為使用查詢通知作準(zhǔn)備
因為默認(rèn)情況下SQL Server 2005處于高度安全的狀態(tài),所以你需要“打開”一些功能才能使用查詢通知。首先,你要使用的每一個數(shù)據(jù)庫都需要啟動Service Broker功能。為此,你可以在T-SQL中使用如下命令實現(xiàn):
USE mydatabase
ALTER DATABASE mydb SET ENABLE_BROKER
另外,你需要授予一些SQL Server權(quán)限以允許非管理員帳戶能夠參與使用查詢通知。
五. SqlDependency.Start和Stop
SqlDependency和SqlCacheDependency都要求,在任何通知請求前先調(diào)用靜態(tài)方法SqlDependency.Start()。這個方法負(fù)責(zé)創(chuàng)建一個SqlConnection以實現(xiàn)在數(shù)據(jù)改變時接收通知。注意,你僅需要在一個應(yīng)用程序的生命周期的開始建立這些內(nèi)容。例如,在一個ASP.NET應(yīng)用程序中,global.asax文件的Application_Start事件處理器就是實現(xiàn)這一功能的好地方。
注意,對包含在通知中的每一個連接都應(yīng)該調(diào)用Start方法。因此,如果你在應(yīng)用程序中存取多個數(shù)據(jù)庫,那么你需要為每一個數(shù)據(jù)庫調(diào)用Start。在下列示例中,有一個針對Pubs數(shù)據(jù)庫的連接串pubsConn,它在這個應(yīng)用程序的web.config文件中定義。
為了切斷這個連接,你可以使用SqlDependency.Stop(),這也是一個靜態(tài)方法。
Sub Application_Start(ByVal sender as Object, _
ByVal e as EventArgs)
System.Data.SqlClient.SqlDependency.Start _
(System.Configuration.ConfigurationManager. _
Connectionstrings("pubsConn").ConnectionString)
End Sub
Sub Application_End(ByVal sender as Object,
ByVal e as EventArgs)
System.Data.SqlClient.SqlDependency.Stop _
(System.Configuration.ConfigurationManager. _
Connectionstrings("pubsConn").ConnectionString)
End Sub
如果你在調(diào)用Start和Stop的同時觀察SQL Server Profiler,那么你會看到許多有趣的信息。當(dāng)調(diào)用Start時,應(yīng)用程序運行一個查詢以確保支持Service Broker,然后創(chuàng)建一個存儲過程備以后用于清除在Service Broker基礎(chǔ)結(jié)構(gòu)中的SqlDependency隊列和服務(wù)。最后,它運行一個SQL Server 2005 WaitFor命令,該命令負(fù)責(zé)查詢在Notification Service部分的入口。這就是如果你使用ADO.NET的低級SqlNotificationRequest對象的話所有你需要顯式完成的事情。
本新聞共
4頁,當(dāng)前在第
2頁
1 2 3 4