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
}
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);
}
}