任何包装代码以检测应用程序池的方法都会导致IIS 7 MVC 3.0崩溃

时间:2011-05-27 11:43:41

标签: c# iis-7

我有一个MVC 3.0应用程序,当部署时,每次运行某个页面时都会使应用程序池崩溃。

这个页面基本上没有对任何其他页面做任何不同的事情 获取数据库记录并使用视图显示信息。

我无法弄清楚为什么崩溃导致应用池关闭并关闭整个网站。 我已经安装了ELMAH日志跟踪并且已经包装了一个基本控制器,但是当应用程序池崩溃时,没有日志写入ELMAH

我尝试使用此方法捕获所有非托管异常 http://support.microsoft.com/kb/911816然而,应用程序池仍然崩溃,我没有找到解决方案。

没有代码是不受管理的,所以我不确定为什么会发生这种情况,除了对数据库的调用可能失败但在数据库日志中没有看到错误。 我正在使用DynamicMethod生成IL代码以映射到我的模型的数据库结构,但是相同的实现适用于所有其他模型,并且在我的开发机器上损坏的调用正常工作。

问题1 如果此IL生成的代码失败,是否仍会在标准请求错误处理中捕获异常?

事件日志很神秘,旁边没用。

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error in the .NET Runtime at IP      000007FEFA352648 (000007FEFA350000) with exit code 80131506.

64位窗口的DebugDiag只允许我分析转储文件,我无法将其附加到应用程序池或IIS进程。

应用程序在VS2010的调试和发布模式下完美运行。

问题2 我正在开发32位但部署到64位。是否有任何情况下32位工作正常但在64位环境中失败?

问题3 我不确定我可以采取哪些其他日志记录或方法来解决此问题。 是否有任何其他日志记录或代码可以包含我的请求以尝试跟踪问题。

我很确定它必须是动态方法代码中的崩溃,所以如果有人可以回答Question1那么这将真的有帮助

2 个答案:

答案 0 :(得分:1)

好问题是DynamicMethod生成IL代码失败。

如果字段类型和数据库类型不匹配,则会崩溃整个应用程序池

应该在开发服务器上找到任何类型不匹配但是 问题是int的数据库类型和Decimal的字段类型 没有在32位开发机器上中断但在64位部署服务器上崩溃。

生成IL代码到dll并运行PEVerify显示问题。

问题1.不,
问题2.在这种情况下是的 问题3. PEVerify,如果您要生成IL代码,请始终通过PEVerify运行它。

答案 1 :(得分:0)

你得到的错误是致命的CLR崩溃。

1)否

2)您需要构建适当的运行时。

3)如果不分享您在代码中执行的操作以及您使用的非托管资源的信息,则无法继续提供帮助。