问题描述
||
我有一个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,那将真的有帮助
解决方法
好的问题在于DynamicMethod生成IL代码失败。
如果字段类型和数据库类型不匹配,则会使整个应用程序池崩溃
应该在开发服务器上找到任何类型不匹配的内容,但是
问题是数据库类型为int,字段类型为Decimal
并未在32位开发机上中断,但在64位部署服务器上中断了。
生成IL代码到dll并运行PEVerify出现了问题。
问题1.不,
问题2。在这种情况下,是
问题3. PEVerify,如果要生成IL代码,请始终通过PEVerify运行它。
, 您得到的错误是致命的CLR崩溃。
1)没有
2)您需要构建适当的运行时。
3)如果不共享有关您在代码中所做的工作以及使用的非托管资源的信息,就不可能进一步提供帮助。