asp.net 无法访问已关闭的资源集

来源:互联网 发布:中国联通与朱记大数据 编辑:程序博客网 时间:2024/06/03 21:00

遇到这个问题,最简单直接的方式有:

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

    }

 

 这样就不用在每次更改DataContext.dxml文件时,重新指定ConnectionString了。也同时解决了“访问的资源已关闭”的问题。