最近网站总是报"Timer_Connection"错误,导致该网站所使用的应用程序池由于错误过多停止运行,网站也就出现了service unvaliable,无法访问,在网上查了很多资料,结果很让人无奈,这个问题已经困扰我了很久,一直没有得到解决,后来同事发来一篇文章让我有了新的解决方法,虽然不能根本解决这个报错,但可以快速清空并恢复指定的应用程序池

不多说了,看看下面这个方法吧,主要是创建一个连接(如你要监控的网站的一个地址),如果能访问到这个页面说明网站应用程序池没有问题,如果不能访问,也就是会报错喽,这时我们就可以调用下面的方法,去清空并重启该应用程序池,代码如下:

 public void RestartAppPool()
        {
            System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(System.Configuration.ConfigurationSettings.AppSettings["webfile"].ToString());
            request.KeepAlive = false;
            try
            {
                System.Net.HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                response.Close();
            }
            catch
            {
                DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC/AppPools/" + System.Configuration.ConfigurationSettings.AppSettings["AppPoolName"].ToString());
                root.Invoke("Start", null);
                root.CommitChanges();
                AddEventLog("重启应用程序池于:"+DateTime.Now.ToLongTimeString());
                root.Close();
            }
        }

这里有一点需要注意,DirectoryEntry需要引用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll

另外还要Using System.Net

而我则是创建了一个windows service来定时去检查应用程序池的状态.

另外,大家在创建windows service的时候可不要忘记在安装进程控件(serviceProcessInstaller1)属性中将Account设置为Local System,否则在您安装这个服务时会提示您输入用户名及密码,如下图

这时您需要在安装服务之前创建一个windows账户,并且需要在策略中"作为服务登录"添加您之前创建的用户,当然这样做实在很麻烦,为了不在安装中出现这个问题,一定要将Account设置为Local System,本人之前就遇见了这个问题,最后不得不在网上又搜了一圈才明白到底是怎么回事,希望您在遇到这个问题是对您有所帮助哦.

 posted on 2009-01-13 23:06  dongpo  阅读(1192)  评论(3编辑  收藏  举报