2010-12-17 101 views
1

我已經創建了一個老式的.ASMX Web服務,並想知道內置的ADO.NET連接池如何使用它。ADO.NET連接池如何與.ASMX Web服務一起使用?

Web服務沒有使用單例模式,所以它在每次請求時都會重新實例化。我的問題是連接會在每次服務請求後從池中刪除,還是會在請求中保存在池中?我的服務非常頻繁地被調用,但我不想每次都進行連接的設置和拆卸,如果可以避免的話。

我讀過該池是爲AppDomain維護的,但我不確定每個請求是否生成新的AppDomain。

我也很好奇,如果在這種情況下設置最小池大小(對於0以外的小數)是有益的。

有人知道嗎?

回答

3

沒有每個請求都不會生成新的應用程序域。該網站/應用程序的所有請求都位於同一個應用程序域中,因此共享連接池。一旦asmx請求與連接完成,它將它返回到池中,並且線中的下一個請求抓取它(假設池中沒有另一個連接可用)。

澄清的一點。您可以擁有兩個指向相同代碼並且位於不同應用程序域的不同Web應用程序。這兩個應用程序不共享任何內容(考慮兩次啓動相同的應用程序)。

我也好奇,如果這將是有益的 在這種情況下, 設置閔池大小(以0以外的 少數)。

因此,根據應用可能會有所幫助。建立連接需要時間,所以準備好一些準備就可以放棄。如果您有請求說使用一個連接,那麼可以讓一個人等待(這一切都取決於您希望應用程序響應的速度)。當你需要爲一個請求打開3或4個不同的(你明白的)時,這真的可以發揮作用。那麼爲什麼你需要多個連接?關於訪問數據和用於登錄數據庫的單獨線程(記錄到數據庫與文件是完全不同的對話)呢?現在你需要兩個。有多種情況可以發揮作用。取決於你的數據庫服務器持有一個開放的連接可以很便宜,所以將它設置爲一個小數字可以是一個巨大的壓力。 (爲了記錄,我已經看到連接到數據庫的情景需要幾秒鐘,比如3-5,所以在這種情況下爲用戶保持開放連接是有益的。)

這是用於最大池大小
不,這不是有益的,因爲對該服務的所有請求都使用相同的池(假設連接使用相同的連接字符串,並且不會觸及不同的服務器,而且這些服務器具有單獨的連接池)。沒有可用的連接,是一種非常快速且毫無疑問的破壞服務性能的方法。

+0

謝謝,這是我懷疑,但想要一些驗證。 – 2010-12-17 22:26:40

+0

我認爲設置最小池大小意味着總會有x個可用的連接數量,並且在一段空閒時間之後不會被銷燬。 – 2010-12-19 05:15:11

+0

你是對的我把它和Max Pool Size混在一起。 – kemiller2002 2010-12-19 14:56:36