【问题标题】:IIS7 restart issueIIS7重启问题
【发布时间】:2011-01-03 23:17:27
【问题描述】:

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

我遇到的问题是 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 重定向。

感谢您对此的任何帮助。

【问题讨论】:

  • 我在上面撒了个谎,我确实收到了一个错误消息:异常消息:访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED)) 更多信息 应用程序池重新启动失败 异常详细信息 System.UnauthorizedAccessException:访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))在 Microsoft.Web.Administration.ConfigurationElement.ExecuteMethod(String methodName) 在 Microsoft.Web.Administration.ApplicationPool.Recycle() 在 Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute()在 GeneralServices.RestartAppPool()

标签: c# asp.net iis-7


【解决方案1】:

我没有使用Microsoft.Web.Administration 命名空间,但是如何卸载应用程序域并向您的网站发送请求以便重新启动应用程序?

好的 example(第 2 点)作者 Peter Bromberg 如何做到这一点。

更新。

读取错误堆栈

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

我想到了最常见的原因:权限不足。所有管理行为都需要管理权限。执行上述代码时,会模拟哪个用户帐户? IUSR?切换到该块的任何管理员,它应该可以正常工作。

【讨论】:

  • 我认为这就是 IIS6 的做法,因为 .net 没有直接挂钩到 IIS6
  • 但是为什么这不能在 IIS7 上工作呢?阅读错误堆栈后,我用一个想法添加了更新。
【解决方案2】:

好吧,我似乎已经用一些胶带和粘性塑料解决了(未解决)这个问题。

解决方案

更改了应用程序池设置:Rapid-Fail Protection 为 false

这会阻止 IIS 在多次请求失败后终止应用程序池。

我还添加了重试系统,所以如果recycle请求失败,它会等待10秒再试一次,它会这样做5次,然后放弃并发出异常通知。

这已经解决了问题,并且一切似乎又运行良好了,尽管关于这件事的某些事情表明这是错误的!!在我身上。

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

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2010-09-26
    • 2011-02-04
    相关资源
    最近更新 更多