系統發生「必須有開啟與可用的連接。連接目前的狀態已關閉。」的錯誤。
有可能是什麼問題呢?
最近跟同事 William哥 看一個系統的錯誤,錯誤訊息為「必須有開啟與可用的連接。連接目前的狀態已關閉。」,如下,
ExecuteNonQuery 必須有開啟與可用的連接。連接目前的狀態已關閉。
於 System.Data.SqlClient.SqlConnection.GetOpenConnection(String method)
於 System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
於 System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
於 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
於 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在所有的作業中,只有某一個項目會發生這樣的子的狀況。
看那個作業的時間大約是1分鐘,然後就跳出錯誤。
心理想應該是跟某個東西的 Timeout 有關。因為很多 Timeout 時間都是 60 秒。
於是查看設定檔中 Command Timeout 的設定,是 600 秒。
因為系統中有使用 TransactionScope ,於是查到 TransactionScope 預設的 Timeout 為 60 秒。
剛好符合我們目前問題的狀況。
所以就查到「Transaction scope timeout on 10 minutes」這篇,
可以在 web.config 中設定 TransactionScope 的 Timeout 時間。
後來我們就在 config 中將 TransactionScope 的 Timeout 時間拉長 就可以了。
<system.transactions>
<defaultSettings timeout="00:03:00" />
</system.transactions>
所以大家如果遇到類似的問題,可以參考看看,調整適合系統的Timeout哦!
參考資料
What is TransactionScope default Timeout value?
Transaction scope timeout on 10 minutes
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^