這個問題在StackOverflow中已經被問到過了,但根據我的經驗,答案其實是錯誤的。至少對於.NET Framework 4.0和SQL Server 2005來說,它們是錯誤的。無狀態WCF服務和數據庫連接池
我需要幫助來徹底整理一下。
問題是 - 無狀態WCF服務可以以某種方式使用數據庫連接池嗎?
見Can a Stateless WCF service ...
早期的答案基本上是說,有沒有問題,任何其他ADO.NET的情況沒有什麼區別。但是,我無法獲得無狀態WCF服務來使用連接池EVER,而我可以看到它始終在WCF服務之外工作。無論我嘗試使用什麼連接字符串或參數,它都不會這樣做。
數據庫連接池是爲了在默認情況下啓用,因此一個簡單的連接字符串應該讓我有,例如在SQL Server Express的:
SqlConnection sqlCn = new SqlConnection("Data Source=SERVER\SQLEXPRESS; Initial Catalog = xDB; Integrated Security = SSPI;")
通過這種連接,在Windows窗體應用程序,如果我連續做了3輪sqlCn.Open()
- 查詢數據庫 - sqlCn.Close()
,我在第一個sqlCn.Open()
上得到了很長的延遲(例如2秒),查詢時沒有任何延遲,之後打開/關閉。正是我期望的數據庫連接池。
但是,如果我向包含相同sqlCn.Open()
的WCF服務進行3次調用 - 查詢數據庫 - sqlCn.Close()
代碼,我將獲得每次單次調用的2秒初始慢啓動。
我的猜測是連接池完全由我的代碼創建的ADO.NET對象控制,並且因爲我正在實例化我的WCF服務中使用的任何ADO.NET類(例如SqlConnection
等),所以它們會得到當我的服務電話結束時,以及連接池一起銷燬。
這可能不是真的,但如果不是這樣,我所做的事情有什麼問題嗎?
任何人有任何經驗嗎?
(請不要測試,然後再發布任何假設或理論)
你確定你的連接使用try {...} {最後的Connection.close()被關閉,甚至在例外的情況下,例如; }或使用聲明? –
是的,他們正在明確關閉。 – nepdev