【问题标题】:IIS7/Win7 - App Pool is failing suddenlyIIS7/Win7 - 应用程序池突然失败
【发布时间】:2011-01-05 06:10:11
【问题描述】:

在使用此配置近 5 个月后,我现在得到了一系列:

“为应用程序池“经典 .NET AppPool”提供服务的进程与 Windows 进程激活服务发生了致命的通信错误。进程 ID 为“1640”。”

这导致:

应用程序池“Classic .NET AppPool”由于为该应用程序池提供服务的进程出现一系列故障而被自动禁用。

在我的一生中,我无法弄清楚是什么改变导致了这种情况,我也无法弄清楚如何可能更深入地挖掘是什么导致它失败。 p>

我最近(2 周前)开始将实体框架添加到我的解决方案中。就在这发生之前,由于报告的自引用调用,我确实收到了“堆栈空间不足”错误。我在我编写的代码中找不到任何类似的调用,我怀疑 EF 可能在我的简单(3 表)模型中添加了一个错误的连接。

关于从哪里开始寻找任何想法?什么会导致 AppPool 失败?

TIA


注意

在 mscorlib.dll 中发生“System.StackOverflowException”类型的未处理异常

我有一个外部对象调用此方法来获取单个记录:

public static AutoNegotiationDetails GetAutoNegotiationByCompany(Guid companyId)
{
    return RivWorks.Controller.Negotiation.GetAutoNegotiationByCompany(companyId);
}

该方法调用:

internal static AutoNegotiationDetails GetAutoNegotiationByCompany(Guid companyId)
{
    var autoNeg = from a in _dbRiv.AutoNegotiationDetails where a.CompanyId == companyId select a;
    var ret = autoNeg.FirstOrDefault();
    return ret;
}

在单步执行中,我可以在第一个方法中设置一个断点,进入第二个方法,查看填充的记录,返回到第一个方法最后退出该方法。那时我的 IDE 会锁定几秒钟,直到我收到 StackOverflow 错误。

要更准确地了解整个系统:

  • 在 IIS 机器上运行 WebOrb30。
  • 在 VS IDE 中 -> 附加到进程 (INETINFO.exe)
  • 登录WebOrb30 -> 管理控制台 -> 下钻到服务入口点 -> 在输入框中输入CompanyID -> 点击调用
  • 在 VS IDE 中点击断点 ->(见上文)

注意

看起来这可能是由 EF 中的另一个问题引起的。如需进一步说明,请参阅C# - Entity Framework - An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

【问题讨论】:

  • 你能发布调用GetAutoNegotiationByCompany的方法(部分)吗?

标签: iis-7 application-pool


【解决方案1】:

我可能是您有两个应用程序/网站使用一个应用程序池,但这些应用程序/网站运行不同的 .net 版本。

情况可能并非如此,但这是我在 iis 中遇到的唯一类似的反复出现的问题。

【讨论】:

  • 我现在只有一个应用程序,虽然它也在运行一个简单的 WCF 服务(并且已经运行了几个星期)。我添加到我的帖子中,这样可能会在另一个方向上有所启发。
【解决方案2】:

由于我的实体框架中的一个错误,我正在循环调用我的一个关系。这会导致堆栈溢出,并将其作为一般错误报告给 WebOrb,并且 WebOrb 将停止导致应用程序池崩溃。 (我仍然不太了解所有细节)。当我在没有关系的情况下重建我的 EF 模型时,行为就消失了。 (叹气/)

EF 将是另一个问题(或一系列问题)。

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 2011-01-16
    • 2012-08-31
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多