我公司现在运行的网上到货系统最近每天都会发生1-2次的停止服务,
具体描述:
程序为IIS的虚拟目录,运行一段时间后会发生不能使用,IIS的其他虚拟目录可以正常使用,数据库也正常,只要在任务管理器中结束aspnet_wp.exe后就可以正常使用。在出现故障时候我重启IIS和SQL SERVER都不能解决,只有结束aspnet_wp.exe.请教出现这种问题的可能原因。分不够可以再加!急于解决

解决方案 »

  1.   

    根据错误情形来看,问题出在页面缓存这,你仔细检查下你的Cache
      

  2.   

    看看你的aspnet_wp.exe占用了多少CPU和内存,如果占用高,先查查程序中是不是死循环什么的,再看看SQL Server占用了多少CPU和内存,是不是你的SQL语句调用太频繁了。
      

  3.   

    IIS和数据库没问题, 那是不是程序有什么问题。看看系统进程,Cpu 使用情况。跟踪测试一下是不是程序死循环了。
      

  4.   

    aspnet_wp.exe运行一定的时间后会自动停止,还有如果没有访问过一定的时间也会被回收
    在IIS的应用程序池的属性在把回收和性能的一些选项去掉试试
      

  5.   

    向大家汇报一下:
    sqlserver内存基本上维持在90-100M内存。
    aspnet_wp.exe在运行2个小时后能达到100M-170M之间的内存消耗。综合大家的意见猜测可能的情况:
    1、程序有死循环
    2、连接未及时关闭
    3、Cache向大家请教
    1、如何跟踪测试程序,从而发现死循环或未关闭连接?
    2、使用dataset是不是不用手动关闭连接,因为我记得在dataAdapter填充后即自动关闭连接。
      

  6.   

    大家帮忙看一下这个代码是不是有问题
    public static bool checkuser(string yhbm,string pageadd)
    {
    string sql="SELECT c.ljdz FROM WHERE (yhbm = '"+yhbm+"')";
    dbserver db = new dbserver();
    db.DBOpen(true);
    SqlDataReader dr=db.exeSqlForDataReader(sql);
    if(dr.Read())
    return true;
    else
    return false;
    db.DBOpen(false);//我郁闷的就是这一行,如果不写就是没关闭,写了又总是提示
            //e:\web\ywnweb\com\comm.cs(48,4): warning CS0162: 检测到无法访问的代码,
    }
      

  7.   

    为什么不用USING方式来创建
    using(sqlconnection con = new sqlconnection("链接字符串"))
    {
    你的操作内容.这样的话就不需要再刻意的调用CLOSE事件了。
    }
      

  8.   

    从你的代码上来有问题
    public static bool checkuser(string yhbm,string pageadd)
    {
    string sql="SELECT c.ljdz FROM WHERE (yhbm = '"+yhbm+"')";         
    //从这里看起来你的数据库链接是一个全局的变量。你这样用看上去很美很方便。但是在用户量一大保证出错。别问我为什么反正我大流量测试过.正常是在函数里面就创建这样其实是最节约服务器的资源
             dbserver db = new dbserver();
             
    db.DBOpen(true);
    SqlDataReader dr=db.exeSqlForDataReader(sql);
    if(dr.Read())
    return true;
    else
    return false;
    db.DBOpen(false);
    }
    反正我们公司我现在要求是全部是在调用的时候动态的创建一个CONNECTION。然后进行调用。你这样封装必然不稳定。但是看上去很符合编码要求很美很规范。你这样资源没有办法完全回收必然出错。
      

  9.   

    有时IIS的设置也可能出问题的!
    "只要在任务管理器中结束aspnet_wp.exe后就可以正常使用"可能是这个原因.
      

  10.   

    谢谢大家,我怀疑是代码问题,因为每个用户访问页面的时候都要进行权限判定,而原来的代码每次连接都没有关闭,我怀疑是这个原因,明天看是否挂死,明天结贴!
    原来代码:
    cn.Open();
    SqlCommand cmd = new SqlCommand(sql,cn);
    SqlDataReader dr = cmd.ExecuteReader();
    if(dr.Read())
    {
    return true;
    }
    else
    {return false;}
    现在代码:
    cn.Open();
    SqlCommand cmd = new SqlCommand(sql,cn);
    SqlDataReader dr = cmd.ExecuteReader();
    if(dr.Read())
    {
    dr.Close();
    cn.Close();
    return true;
    }
    else
    {return false;}
    这个代码告诉我们先关闭连接再返回bool。
      

  11.   

    应该用结构
    try
       cn.Open();
       ....
       return true
    catch ex as exction 
       return false
    finally
       dr.Close();
       cn.Close
    end try
      

  12.   

    哈哈,楼上的说的也可以,我在微软网站找到IIS config配置的文件<processModel> 元素
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/gngrfProcessmodelSection.asp将其中的timeout指定时间,不要使用Infinite估计通过以上两种方法就应该能解决,谢谢大家!结贴!!