任何包装代码以检测应用程序池的方法都会破坏IIS 7 MVC 3.0

本文关键字:IIS MVC 方法 代码 包装 检测 应用 程序池 应用程序 任何 | 更新日期: 2023-09-27 17:57:44

我有一个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我不确定我还能做什么其他日志记录或方法来发现这个问题。有没有其他日志记录或代码可以用来包装我的请求,以尝试跟踪问题。

我很确定这一定是动态方法代码中的崩溃,所以如果有人能回答问题1,那么这将真正帮助

任何包装代码以检测应用程序池的方法都会破坏IIS 7 MVC 3.0

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

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

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

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

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

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

1) 无

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

3) 如果不共享有关您在代码中所做的操作以及使用的非托管资源的信息,就不可能提供任何进一步的帮助。