代码之家  ›  专栏  ›  技术社区  ›  JamesStuddart

IIS7重启问题

  •  2
  • JamesStuddart  · 技术社区  · 15 年前

    我的一个网站上有一个WebService,它重新启动网站应用程序池。

    我遇到的问题是iis7应用程序池一直停止,并发出以下警告,然后出错:

    警告: 为应用程序池“AppPoolNamehere”提供服务的进程在关闭期间超出了时间限制。

    错误: 由于为应用程序池提供服务的进程中出现一系列故障,应用程序池“AppPoolNamehere”将被自动禁用。

    我使用的代码是:

                try
            {
    
                var serverManager = new ServerManager();
    
                var currentPoolName = SettingsManager.AppPoolName;
    
                if (!string.IsNullOrEmpty(currentPoolName))
                    serverManager.ApplicationPools[currentPoolName].Recycle();
    
                HttpRuntime.Close();
            }
            catch (Exception ex)
            {                
                var exceptionManager = ExceptionManagerFactory.GetExceptionManager();
                exceptionManager.LogException(ExceptionManager.Severities.Critical, ex,
                                              "App Pool restart failed");
            }
    

    我没有得到任何例外被扔在这里,但应用程序池是停止的,这不是一直发生,很难复制,我已经尝试了几个不同的事情,甚至只是击中地狱的服务,有时它的罚款其他时候死亡。

    我能做些什么来解决这个问题吗?

    我必须重新启动它的原因是由于Webconfig的外部配置文件处理从管理系统更新的URL重定向。

    谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   JamesStuddart    15 年前

    嗯,我似乎已经用一些胶带和粘性塑料把问题分类了(没有解决)。

    解决方案

    更改的应用程序池设置: 快速故障保护

    这将阻止IIS在收到几个失败的请求后终止应用程序池。

    我还添加了重试系统,所以如果回收请求失败,它会等待10秒再重试,在放弃并发出异常通知之前,它会做5次。

    这已经解决了这个问题,一切似乎都恢复了正常,尽管关于这个尖叫的一些事情是错误的!!对着我。

    只有当IIS看到更改时,才会监视网站中的其他文件并重新启动应用程序池。

        2
  •  0
  •   terR0Q    15 年前

    我没和他一起工作 Microsoft.Web.Administration 命名空间,但是卸载应用程序域并向您的网站发送请求以便再次启动应用程序呢?

    example (第二点)彼得布罗姆伯格如何做到这一点。

    更新。

    读取错误堆栈

    System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
    at Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute()
    

    我想到了最常见的原因:权利不足。所有行政行为都需要行政权利。执行以上代码时,模拟哪个用户帐户?IUSR?切换到该块的任何管理员,它将毫无例外地工作。