asp.net 返回超时的解决方法
1.IIS->[網站]->屬性-》連接超時。默認為120秒
2.WEB.CONFIG 手工添加httpRuntime,如
<system.web>
?<httpRuntime maxRequestLength="1000000" executionTimeout="2000" />
</system.web>
3.同步執行WEBSERVICE時,需要設置TIMEOUT屬性,如
CompilerSvr.MyFavoritesService compiler=new FDN.DMS.Controls.CompilerSvr.MyFavoritesService();
?? compiler.Timeout =2000000; //毫秒
錯誤處理封裝
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
/** <summary>
/// Summary description for Error
/// </summary>
public class ErrorManager
{
??? private System.Timers.Timer m_timer;
??? private Hashtable m_htErr;
??? /** <summary>
??? /// 私有的構造函數
??? /// </summary>
??? private ErrorManager()
??? {
??????? this.m_timer = new System.Timers.Timer();
??????? this.m_timer.Enabled = false;
??????? this.m_timer.Interval = 12 * 60 * 60 * 1000;??? //默認12個小時執行一次
??????? this.m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
??????? this.m_htErr = new Hashtable();
??? }
??? /** <summary>
??? /// 單例模式的接口
??? /// </summary>
??? public static readonly ErrorManager Instance = new ErrorManager();
??? /** <summary>
??? /// 設置定時器的頻率,單位是毫秒
??? /// </summary>
??? /// <param name="Interval">毫秒</param>
??? public void SetTimerInterval(int Interval)
??? {
??????? this.m_timer.Interval = Interval;
??? }
??? /** <summary>
??? /// 定時器開始
??? /// </summary>
??? public void TimerStart()
??? {
??????? this.m_timer.Enabled = true;
??? }
??? /** <summary>
??? /// 定時器結束
??? /// </summary>
??? public void TimerStop()
??? {
??????? this.m_timer.Enabled = false;
??? }
??? /** <summary>
??? /// 發生了一個錯誤,把錯誤信息保存起來,并返回錯誤的id,便于頁面中讀取
??? /// </summary>
??? /// <returns>返回錯誤的id</returns>
??? public string AddError()
??? {
??????? string key = Guid.NewGuid().ToString();
??????? string msg = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
??????????? + HttpContext.Current.Server.GetLastError().GetBaseException().Message;
??????? this.m_htErr.Add(key, msg);
??????? HttpContext.Current.Server.ClearError();
??????? return key;
??? }
??? /** <summary>
??? /// 返回指定Key的錯誤信息,前19個字符是錯誤發生的時間
??? /// </summary>
??? /// <param name="key">key,是一個guid</param>
??? /// <returns>返回錯誤信息</returns>
??? public string GetError(string key)
??? {
??????? return this.m_htErr[key].ToString();
??? }
??? /** <summary>
??? /// 定時在Hashtable中清理錯誤信息
??? /// </summary>
??? /// <param name="sender"></param>
??? /// <param name="e"></param>
??? private void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
??? {
??????? ArrayList list = new ArrayList();
??????? lock (this.m_htErr)
??????? {
??????????? DateTime now = DateTime.Now;
??????????? TimeSpan ts;
??????????? foreach (string key in this.m_htErr.Keys)
??????????? {
??????????????? //前19個字符是錯誤發生的日期,yyyy-MM-dd HH:mm:ss
??????????????? string time = this.m_htErr[key].ToString().Substring(0, 19);???
??????????????? ts = now - Convert.ToDateTime(time);
??????????????? if (ts.TotalMinutes > 20)?? //把20分鐘前的錯誤信息從hashtable中清除
??????????????????? list.Add(key);
??????????? }
??????????? foreach (string key in list)
??????????? {
??????????????? this.m_htErr.Remove(key);
??????????? }
??????? }
??? }
??? Session操作的封裝#region Session操作的封裝
??? /** <summary>
??? /// 取得指定鍵值的Session
??? /// </summary>
??? /// <param name="key">鍵值</param>
??? /// <returns>鍵內容值</returns>
??? public object GetSession(string key)
??? {
??????? object val = HttpContext.Current.Session[key];
??????? if (val == null)
??????????? throw new Exception("頁面超時,請重新登錄。");
??????? return val;
??? }
??? /** <summary>
??? /// 設置Session
??? /// </summary>
??? /// <param name="key">鍵值</param>
??? /// <param name="val">鍵內容</param>
??? public void SetSession(string key, object val)
??? {
??????? HttpContext.Current.Session[key] = val;
??? }
??? #endregion
}
ASP.NET 2.0編程小技巧兩則
1、利用app_offline.htm
在asp.net 2.0中,如果你要COPY站點,進行站點維護,部署,和進行大量修改,有可能要停掉你的WEB應用程序了,而以一個友好的方式提示給用戶,比如什么“本 網站正在更新”等等的信息,在ASP.NET 2.0中,你可以建立一個叫app_offline.htm(大小寫沒關系)的靜態HTM頁面文件,其中修改成你要臨時顯示的內容,將其放在你的應用的根 目錄下。這樣,任何外部的請求的話,都會馬上被轉移到該頁面了。這個時候,你的網站依然可以被訪問,只不過你的應用不能被訪問了。呵呵,那樣的話,就可以 避免很多更新網站是的麻煩事了。
當然,另一個方法,也可以在vs.net 2005的website菜單下的asp .net configuration管理工具中,使你的站點offline.
要注意的是,這個app_offline.htm頁面的大小,要大于512字節,用asp.net 之父SCOTT的話來說,就是"
Make sure the app_offline.htm file is large enough (512 bytes) to disable the IE “friendly http errors” feature
2、利用MaintainScrollPositionOnPostback屬性
考慮到一個很長的頁面,如果每次POSTBACK之后,那個IE的滾動條可能都會回到最開始的地方(最上面),而不會保留其原先已經有的位置, 這樣用戶會比較麻煩,又要把滾動條移動到原來的地方,在asp.net 2.0中,可以設置MaintainScrollPositionOnPostback屬性為TRUE即可,即
<%@ Page Language="VB" AutoEventWireup="false" MaintainScrollPositionOnPostback="true" CodeFile="MaintainScrollPosition.aspx.vb" Inherits="MaintainScrollPosition" %>
DataGrid的多行提交:
盡管ASP.NET DataGrid是眾所周知非常好的表格控件,不過,提起DataGrid的編輯功能,我們卻不敢恭維了,就拿DataGrid的數據提交功能來說,的確 存在很大的問題:在DataGrid中,每編輯一行就要提交一行,即所謂“單行編輯、單行提交”,這樣的話,如果編輯的行數過多,不僅用戶操作繁瑣,還會 造成對服務器的頻繁訪問,極大降低系統效率。
當然了,有一種借尸還魂的解決方法,那就是把所要編輯的內容轉到其他的頁中在TextBox中進行編輯。不過,仔細想想,這種方法難道不是自己在騙 自己嗎,還有在Grid中我們編輯的時候總不能老是用Tab鍵來實現Grid(TextBox)之間的跳轉吧,如果響應回車事件,那么需要程序員浪費很大 的精力來開發。
如何解決上述問題呢?下面我向大家推薦一個我正在使用的國產DataGrid:SmartGrid(天空軟件站可以下載:http://www.skycn.com/soft/23547.html ),這個控件我已經用了好長的時間了,現在來同大家探討一下SmartGrid的多行提交的方法:SmartGrid并沒有DataGrid中的那些按鈕列而是整個的表單只有一個提交按鈕,無論你更改了一行或者是多行都可以一次性的提交,下面來隨便看點例子:
實例:
上圖中是一個比較好的編輯的例子,例子顯示,你可以編輯多行也可以編輯一行,然后一起進行提交。
代碼:
修改按鈕的代碼:
private void btonSave_Click(object sender, System.EventArgs e)
???????? {
????????????? this.DataGrid1.ReadOnly = false;//進入編輯
????????????? this.DataGrid1.AllowAdd = true;//允許添加
????????????? this.DataGrid1.AllowDelete = true;//允許刪除
???????? }
此段代碼是smartgrid的獨有的屬性你可以設添加刪除 編輯 的各種的功能
保存按鈕的代碼:
private void Button2_Click(object sender, System.EventArgs e)
???????? {
????????????? DataTable t = (DataTable)this.SmartGrid1.DataSource;
????????????? this.sqlDataAdapter1.Update(t);????????????
????????????? t.Clear();
????????????? this.sqlDataAdapter1.Fill(t);
????????????? this.SmartGrid1.DataSource = t;
???????? }
這是整體的把數據提交到數據庫中,這種做法適合大數據量的情況
還有一種是數據逐行的提交到服務器
代碼:
private void btonSave_Click(object sender, System.EventArgs e)
???????? {????????????
????????????? DataTable tb=(DataTable)this.SmartGrid1.DataSource;
????????????? SqlParameter[] parameters=new SqlParameter[5];
????????????? foreach(DataRow dr in tb.Rows)
????????????? {
?????????????????? parameters[0]=new SqlParameter("@customerId",""+dr[1]+"");
?????????????????? parameters[1]=new SqlParameter("@companyName",""+dr[0]+"");
?????????????????? parameters[2]=new SqlParameter("@contactName",""+dr[2]+"");
?????????????????? parameters[3]=new SqlParameter("@contactTitle",""+dr[3]+"");
?????????????????? parameters[4]=new SqlParameter("@address",""+dr[4]+"");
?????????????????? //EamPd 是類Execute是執行存儲過程的函數parameters是存儲過程所需要的參數
?????????????????? EamPd.Execute("CreatLayer",parameters);
????????????? }????????????
???????? }
轉載于:https://www.cnblogs.com/suchenge/articles/1502234.html
總結
以上是生活随笔為你收集整理的asp.net 返回超时的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BlendMode类
- 下一篇: 最常见的20种VC++编译错误信息