錯誤訊息
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
超時已過期。完成操作或服務器之前已超時期間沒有響應。
狀況說明:
當初開始是沒有很多資料時一個月一個月跑還正常,但當要跑一整年的資料後就出現問題
有個查詢用SQL工具查詢就要花3分鐘,後來在ASP.NET查就一直出現錯誤
排除:
有試著先把SQL查詢字串優化,但因為有個資料表沒有唯一索引,查詢一直無法優化
後來只好試著讓ASP.NET連線不要逾時這樣
上網找資料:
網路上找資料是說改 web.config的executionTimeout="90",
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
</ system.web>
也有說要改IIS設定
https://technet.microsoft.com/zh-tw/library/cc771956%28v=ws.10%29.aspx
裡面有一段說,但無效
=========================================================
若要使用 UI
開啟 IIS 管理員。 如需開啟 IIS 管理員的資訊,請參閱開啟 IIS 管理員 (IIS 7)。
展開 [連線] 窗格中的伺服器節點,然後按一下 [應用程式集區]。
在 [應用程式集區] 頁面上,選取您要為其指定閒置逾時設定的應用程式集區,然後在 [動作] 窗格中,按一下 [進階設定]。
在 [閒置逾時 (分)] 方塊中輸入分鐘數,然後按一下 [確定]。
=========================================================
後來找到這篇
https://dotblogs.com.tw/rainmaker/archive/2010/01/11/12955.aspx
加上這篇
http://www.blueshop.com.tw/board/FUM20050124191756KKC/BRD20101201233345X7V.html
測議後,原來問題出來Database的Timeout,cmd.CommandTimeout = 180; 這個有用
在SQL中改了一下 ,就OK了
==========================================================
try
{
cn.Open();
cmd.CommandTimeout = 180;
StrNumerator = cmd.ExecuteScalar().ToString();
cmd.CommandText = qs2;
StrDenominator = cmd.ExecuteScalar().ToString();
lbl_Numerator.Text = "分子 : " + StrNumerator;
lbl_Denominator.Text = "分母 : " + StrDenominator;
}
catch (Exception err)
{
lblmsg.Text = "Connection 錯誤 : " + err.Message;
}
finally
{
cn.Close();
cn.Dispose();
}
==========================================================
因為我有用AJAX,所以 要改 AsyncPostBackTimeout="180" ,這個有用
<asp:ScriptManager ID="ScriptManager1" runat="server"
AsyncPostBackTimeout="180">
</asp:ScriptManager>
總結
1.要改 web.config 裡 httpRuntime executionTimeout="180"
2.再加上 cmd.CommandTimeout = 180 ,預設好像只有30秒
3.再加上有用AJAX,所以這個也要改 AsyncPostBackTimeout="180"
沒有留言:
張貼留言