"")
using namespace MSXMLAnalysisSCLib;
請求和返回連接
從連接池請求連接所用的機制不同於 OLE DB 資源池對基於 Web 的應用程序進行快速訪問所用的機制。連接池對象將活動連接池分成兩組:“可用連接”和“已用連接”。可用連接由當前未分配給客戶端應用程序的連接組成;已用連接是指當前已分配給客戶端應用程序並被它使用的那些連接。
連接請求需要采用特殊的身份驗證和模擬機制。當通過應用程序請求連接時(ADOConPool 對象使用 GetConnection 方法,而 OLEDBConPool 對象使用 GetSession 方法),連接池試圖檢索可用連接,檢索條件是該連接使用的域名和用戶名與客戶端應用程序所用的安全標識符 (SID) 相同。如果找到匹配的可用連接,則將其返回到客戶端應用程序。
如果未找到與客戶端 SID 信息匹配的連接,連接池對象就會對客戶端請求中傳遞的連接信息進行分析,以確定連接池中是否已經存在同一個請求數據庫的可用連接。如果找到匹配的數據庫,連接池對象就會嘗試將客戶端請求的角色安全性與現有可用連接的角色安全性進行匹配。如果發現角色安全性是匹配的,連接池對象會接著比較可用連接的用戶名和客戶端請求的用戶名。如果用戶名也匹配,則將可用連接返回到客戶端應用程序。如果用戶名不匹配,則根據 Analysis 服務器上的角色安全性,使用客戶端請求的域和用戶名重新驗證可用連接,然後將其返回到發出請求的客戶端應用程序。
如果未找到匹配的角色安全性和數據庫,則在連接池中創建一個新的連接並將其分配給發出請求的客戶端應用程序。
與資源共享通常采用的方法相比,此方法還具備一個優點,即發出請求的客戶端應用程序可以重復使用具有同一角色安全性權限的現有活動連接,即使該連接最初是由其他用戶請求的。與可用連接相關聯的新用戶名仍然通過了驗證,因此能夠維護其安全性,並且可以將該連接提供給客戶端。這就縮短了為大量並發用戶提供服務的客戶端應用程序的連接時間並降低了費用。
對於那些執行大量操作並需要重復請求和返回連接的客戶端應用程序來說,該機制的效率更高。可以將同一個活動且經過驗證的連接返回到發出請求的客戶端應用程序。
對於客戶端應用程序來說,將連接返回到連接池是一個非常簡單的過程。客戶端應用程序將連接引用傳遞回連接池對象(ADOConPool 對象使用 ReturnConnection 方法,而 OLEDBConPool 對象使用 ReturnSession 方法)。連接池對象驗證傳遞回的連接對象是否確實屬於該連接池,然後才將其放回可用連接池中。
注意事項
如果用戶請求了某個連接,將其釋放,然後又從連接池對象中請求另一個連接,則根據連接池內的活動連接重新驗證用戶所使用的模擬機制將返回同一連接,而不需要重復訪問 Analysis 服務器。如果用戶釋放第一個連接請求後其角色權限發生了變化,則第二個請求將返回具有最初角色權限的相同連接。
例如,某個用戶在 Analysis 服務器上的角色為 Role A。Role A 使用戶可以對兩個多維數據集 Cube A 和 Cube B 運行查詢。當此用戶所使用的客戶端應用程序首次請求連接時,返回的連接有權訪問 Cube A 和 Cube B。客戶端應用程序運行查詢,然後釋放連接。Analysis 服務器的管理員現在將 Role A 的訪問權限更改為只能訪問 Cube A。如果此用戶的客戶端應用程序請求另一個連接,首次請求時創建的連接將再次返回到該客戶端應用程序,但是,它仍然有權訪問 Cube A 和 Cube B。雖然 Role A 對應的用戶當前只能訪問 Cube A,但仍會對 Cube B 繼續執行查詢,就好象此用戶對該多維數據集仍具有訪問權限一樣。
只有重新分配活動連接,才會出現這種問題;新創建的連接始終會跟 Analysis 服務器進行驗證
正是由於這個原因,IIS 5.0 或更高版本認為 XML for Analysis Provider 並不靈活。
這意味著如果使用 IIS 5.0 或更高版本的默認設置,ADOConPool 和 OLEDBConPool 對象在緩存於 ASP 應用程序的應用程序或會話作用域中(換句話說,緩存於 ASP Application 或 Session 對象變量中)時將使用系統安全性上下文。請求和返回連接中介紹的模擬機制將無法正常工作。連接池對象在試圖驗證所有活動連接時將使用默認的 IIS 用戶,而不是當前連接的用戶。
為了糾正這一錯誤,請將 IIS 5.0 或更高版本的配置數據庫中的 ASPTrackThreadingModel 設置更改為 True。更改此設置是為了防止 IIS 檢查 COM 組件的靈活性,但是,由於要進行封送處理和序列化,這會導致性能的降低,因此應該只在包含 Web 應用程序的虛擬目錄或 Web 目錄中更改此設置。
平衡和收縮連接池
連接池中包含的連接數目沒有嚴格的限制,因為已將基礎管理機制設計為無阻礙機制,即客戶端應用程序在請求連接時應該都能獲得連接。正是由於無阻礙的特點,兩個對象才能使用相同的被動技術來管理連接。
不過,也可以使用兩種不同的技術來管理連接池:“平衡”和“收縮”。
平衡連接池
每當將連接返