使用MVC3的IIS 7.5上的HTTP 500内部服务器错误

我试图在我们的生产服务器上安装一个MVC3应用程序,没有运气。 该应用程序来自第三方(编译),所以debugging不可用于我。 此外,我强烈怀疑在网站中的任何代码有机会执行之前发生错误。

我们的登台服务器,就我所能确定的那样,就像生产服务器一样。 两者都运行Windows Server 2008 Standard R2,两者都运行Sharepoint 2010站点(尽pipe此安装不以任何方式触及)。 IIS是7.5版本,并且.NET Framework 4.0(由MVC应用程序要求)(最近)安装(由我,在重新启动之后)。 该应用程序是非常小,简单,据我所知坚持相当标准的function – 包括表单authentication(即它不拉肮脏的诡计)。

浏览器中显示的错误信息非常普遍:

HTTP Error 500.0 - Internal Server Error An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur. 

应用程序事件日志中的“详细说明原因的错误消息”似乎只是猜测 – 虔诚的希望,无论代码实际上是否导致错误都会logging下来。 在事件日志中找不到任何有用的东西(只有与IISlogging相同的消息)。

 Module: AspNetInitClrHostFailureModule Notification: BeginRequest Handler: StaticFile Error Code: 0x80070002 Requested URL: http://xxxxxx.xxxxxx.xx:80/ Physical Path: C:\Xxxxxxx\Prod\WebClient Logon Method: Not yet determined Logon User: Not yet determined 

使用失败的请求追踪,我已经能够跟踪AspNetInitClrHostFailureModule的错误(也如上所示):

 103. -NOTIFY_MODULE_START ModuleName AspNetInitClrHostFailureModule Notification 1 fIsPostNotification false Notification BEGIN_REQUEST 104. -SET_RESPONSE_ERROR_DESCRIPTION ErrorDescription An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur. 105. -MODULE_SET_RESPONSE_ERROR_STATUS ModuleName AspNetInitClrHostFailureModule Notification 1 HttpStatus 500 HttpReason Internal Server Error HttpSubStatus 0 ErrorCode 2147942402 ConfigExceptionInfo Notification BEGIN_REQUEST ErrorCode The system cannot find the file specified. (0x80070002) 

所以你有它。 看来,AspNetInitClrHostFailureModule无法find某个文件。 所以有些问题是:

  1. 什么是AspNetInitClrHostFailureModule ? 它没有列在相当疲惫的网站IISpipe理器中可configuration的模块列表中。 我也没有成功Googlesearch。 也许这是秘密

  2. 我访问该网站的根url。 这应该被FormsAuthenticationModuleredirect到/ Account / LogOn。 为什么然后是处理程序StaticFile ? 这是一个线索?

  3. 我已经尝试删除臭名昭着的system.webserver /模块/ runAllManagedModulesForAllRequests属性,并使错误消失(但MVC实际上并没有工作,当然)。 我准备手动指定所有必要的模块,如果这是需要的,但如果AspNetInitClrHostFailureModule实际上是需要的,我会一样卡住。 有没有人知道,或者有谁能够指引我知道一个典型的MVC3应用程序实际需要什么模块的人?

这个问题很可能是这个问题的重复,但他没有得到任何有用的答案,也没有提出具体的问题。 所以我会自己去的

希望在这里得到一些帮助:)

编辑:我现在已经尝试在服务器上设置一个微不足道的MVC 3项目。 我使用MVC应用程序模板创build了一个新项目,编译并将其部署到服务器。 它的行为方式完全一样。 服务器根本无法运行MVC 3项目。

我会卸载并重新安装ASP.NET。 在安装.NET Framework之后,我遇到了一些问题,现在我几乎可以做到这一点。

要卸载:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ua

重新安装:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i

如果您需要运行32位应用程序,则还需要在C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319文件夹中运行aspnet_regiis。 请注意,执行重新安装会影响其他ASP.NET Web应用程序,如果有任何运行。

由于问题发生得太早,启用.NET Framework Fusion日志logging可能会很有用。 这是为了提供有关装载过程中发生的事情的详细信息。

如果所有程序集加载好,我会使用进程监视器来获取跟踪。 这可能会指出你在失败时所做的正确的方向。

http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx

如果这是一个缺less程序集的问题,那么可以通过检查清单来确定应用程序需要什么程序集。 这可以用ildasm.exe(IL反汇编程序)或ILSpy完成。

我看到很多MVC应用程序在启动时崩溃,在新服务器上引入无意义的错误消息,因为程序集(dll)存在于开发或testing中,而不是在新服务器上。 如果是这种情况,它可能是以下程序集之一,需要复制到网站的bin文件夹中:

 Microsoft.Web.Infrastructure.dll System.Net.Http.dll System.Net.Http.Formatting.dll System.Net.Http.WebRequest.dll System.Web.Extensions.dll System.Web.Helpers.dll System.Web.Http.dll System.Web.Http.SelfHost.dll System.Web.Http.WebHost.dll System.Web.Mvc.dll System.Web.Optimization.dll System.Web.Providers.dll System.Web.Razor.dll System.Web.WebPages.Deployment.dll System.Web.WebPages.dll System.Web.WebPages.Razor.dll 

在安装ASP.NET MVC msi时,通常会将许多这些文件复制到C:\ Program Files x86或C:\ Windows \ winsxs某处(全局程序集caching)中的文件夹。

请注意,如果供应商正在对其程序集进行签名,也可能会发生此问题,但它们是延迟签名的。 这也将在Fusion日志中显示。 这个症状的描述在这里:

https://stackoverflow.com/questions/11030500/assembly-binding-error-bind-result-hr-0x80070002-the-system-cannot-find-the

延迟签署大会
http://msdn.microsoft.com/en-us/library/t07a3dye.aspx

胡乱猜测 :

因为它看起来像一个失败的模块负载,你有没有检查链接到您的网站的应用程序池的参数设置为.Net的正确版本? DefaultAppPool是.net v2.0。 MVC应该可能在“集成”“4.0版”应用程序池(默认名称为ASP.NET v4.0)中。