.net回收IIS6.0应用程序池_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > .net回收IIS6.0应用程序池

.net回收IIS6.0应用程序池

 2010/11/2 10:51:37    程序员俱乐部  我要评论(0)
  • 摘要:公司网站时不时会出现"超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小"的错误,我每次的做法是远程去登陆服务器,手动回收iis上的应用程序池,但是感觉挺麻烦的,后来想想能不能用程序操作iis回收应用程序池,于是google了一把,发现还真能这样做,参照了一位老哥写的程序,做了下还真行,在这里记录下来,希望能给有需要的同志带来一些帮助。usingSystem.DirectoryServices
  • 标签:.net回收IIS6.0应用程序池

 公司网站时不时会出现"超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小"的错误,我每次的做法是远程去登陆服务器,手动回收iis上的应用程序池,但是感觉挺麻烦的,后来想想能不能用程序操作iis回收应用程序池,于是google了一把,发现还真能这样做,参照了一位老哥写的程序,做了下还真行,在这里记录下来,希望能给有需要的同志带来一些帮助。

 using System.DirectoryServices;

 protected void RecycleApp_Click(object sender, EventArgs e)
        {
            string AppPoolName = "DefaultAppPool";  //应用程序池的名称,如“DefaultAppPool”,默认应用程序池
            string method = "Recycle";  // 当method="Recycle"时就是回收,为“Start”时是启动,为“Stop”时是停止。
               
            try
            {               
                DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
                DirectoryEntry findPool = appPool.Children.Find(AppPoolName, "IIsApplicationPool");
                findPool.Invoke(method, null);
                appPool.CommitChanges();
                appPool.Close();
                lbMsg.Text = string.Format("应用程序池{0}{1}成功", AppPoolName, method);
            }
            catch (Exception ex)
            {
                lbMsg.Text = string.Format("应用程序池{0}{2}失败:{1}", AppPoolName, ex.Message, method);
            }

        }

注意:

1. 必须引入System.DirectoryServices.dll
2. 运行此程序的应用程序也的用户必须权限比较高,可以单独为此程序提供应用程序程,或者建立一个虚拟目录在配制里模拟高级用户(如administrators或者system),否则应用程序会抛出“拒绝访问”的异常

 本文首发:程序员俱乐部,转载请保留。

  • 相关文章
发表评论
用户名: 匿名