1. 程式人生 > >IIS應用程序池相關問題及連接池已滿的解決方法

IIS應用程序池相關問題及連接池已滿的解決方法

數據 程序 comm visible 解決方法 code 選項卡 top 我們

關於應用程序池

在 IIS 6.0 中,引入了應用程序池,應用程序池是將一個或多個應用程序鏈接到一個或多個工作進程集合的配置。因為應用程序池中的應用程序與其他應用程序被工作進程邊界分隔,所以某個應用程序池中的應用程序不會受到其他應用程序池中應用程序所產生的問題的影響。有了應用程序池,就可以使用被隔離的進程來運行 Web 應用程序。每個應用程序池在服務器上都具有唯一的憑據,因此您可以識別出哪些應用程序在執行哪些操作。如果一個應用程序失敗,它不會影響在同時運行的其他應用程序。

創建應用程序池

  在IIS管理器中,打開本地計算機,右鍵單擊“應用程序池”,選擇新建“應用程序池” (必須在工作進程隔離模式下才能建立應用程序池) 。“應用程序池名稱”框中,輸入新的應用程序池名稱。如果在“應用程序池 ID”框中出現的 ID (如:AppPool #1)不是您想要的,可進行重命名。如果您單擊了“將現有應用程序池作為模板”,請在“應用程序池名稱”框中右鍵單擊想要用來作為模板的應用程序池。最後單擊[確定]。

  指派應用程序池

  在 IIS 管理器中,右鍵單擊您要為其指派應用程序池的應用程序,然後單擊“屬性”。 單擊“主目錄”選項卡,確認您正在指派的目錄或虛擬目錄的“應用程序名”是否已被填寫。如果“應用程序名”框尚未被填寫,請單擊“創建”,然後輸入名稱。 “應用程序池”列表框中,選擇您想要為其指派的應用程序池的名稱。最後單擊[確定]。

在ASP.NET應用程序開發中,會碰到這樣的情況:“應用程序池已滿,無法連接數據庫”,這是因為有些數據庫操作相關對象沒有釋放資源,沒有被關閉掉。我們可以對應用程序池進行回收,停止再啟動後,應用程序會恢復正常。

大家可以在編碼時避免此類錯誤的發生,我們要養成好習慣,用過Reader一定要先Close然後Dispose,引用了Connection對象也一樣要先Close然後Dispose。同時要註意,Dispose並不能關閉Reader,直接調用Dispose而不Close的話,數據庫並不知道連接對象已經銷毀,而數據庫依然是連接狀態,所以Dispose前一定要先Close

也可以用using運算符來引用相應對象,例如;

using(SqlConnection   conn   =   new   SqlConnection())   
  {   
  conn.Open();   
  
int Voteid = 0; string sql = "select top 1 * from votes_title order by i_code desc"; using(SqlCommand comm = new SqlCommand(sql, conn)) { using(SqlDataReader dr = comm.ExecuteReader()) { if (dr.Read()) { Voteid = Int32.Parse(dr["i_code"].ToString()); Session["Votetitle"] = dr["c_name"].ToString(); //dr.Close(); BindGridshow(Voteid); VoteBtn.Visible = true; } //dr.Close(); } } }

IIS應用程序池相關問題及連接池已滿的解決方法