asp.net 无法访问已关闭的资源集
遇到这个问题,最简单直接的方式有:
1 重新给web服务器上传一个文件;
2 在Internet Information Server,找到default pool菜单(一般在server 系统的IIS当中才有,在默认网站菜单上面),点击鼠标右键,选择“回收”,这样网站就可以打开了。
你也可以选择“属性”,然后在属性页面里设置default pool回收内存的时间点,还有回收周期,如120,代表2个小时。
要从根本上解决此类问题发生:
第一种情况:发生此类问题的是由于数据库连接没有关闭,或已经关闭的情况下访问的应用程序了。
以前我在用vs2005开发应用程序时就遇到过,我每次查询完毕后都没有关闭过系统连接,在我调试系统时因为只有我一个人,系统调试完就释放了系统资源这样就不会引起冲突,但当我配置到web服务器时,由于频繁的测试访问,系统没有释放连接,导致服务器资源耗尽,此时就回出现应用程序无法访问的情况。
现在我主要采用vs2008开发应用程序,使用Linq to sql必然用到DataContenxt,此时所有操作都是基于DataContext的,之前我都将DataContext 实例化成静态对象,这样当我更新完一个记录后,点击浏览时,数据依然是原值,这说明这个DataContext还是之前的静态对象,未释放状态。之后我将DataContext实例化未一般的对象,即非静态类型。这样我将应用程序发布到web服务器时,这类问题再也没有出现过。
第二种情况:
如: partial class myDataContext
{
private static string SQLConnectionString=ConfigurationManager.ConnectionStrings["SLDataConnectionString"].ConnectionString;
public static gsauDataContext Return_DataContext()
{
return new myDataContext
(SQLConnectionString);
}
}
这样在前段调用时采用代码“myDataContext DC=myDataContext.Return_DataContext();”,这样就相当于重新实例了一个static对象,当我采用这样的方式实例化DataContext以后,将应用程序发布到web服务器以后就会出现之前的问题“无法访问已关闭的资源集”。
要解决这个问题,此时我采用了重写DataContext类的方法,如: [Database(Name = "gsau-inc")]
public class DataContextOverRide:gsauDataContext
{
public DataContextOverRide()
: base(ConfigurationManager.ConnectionStrings["SLDataConnectionString"].ConnectionString)
{
}
}