在服务器上,我通过 Web Platform Installer 自动安装了 .NET Framework 4 客户端框架和完整版。同时,ASP.NET MVC 2也通过平台安装器安装。我在 IIS 中创建了一个新的 .NET 4 应用程序池,并将 Web 应用程序放入其中。
此外,我在 web.config 中关闭了自定义错误,但即使如此,也没有显示详细错误信息 - 只有普通的 IIS 7.5 500 内部服务器错误。
有什么建议吗?
好的,这是一个非常奇怪而有趣的问题.. 但我很乐意尽我所能帮助你。
目前我有一个安装了.NET 4 RTM和MVC 2的Server 2008 R2 VPS。不认为我遇到了配置问题,但我确实帮助过其他人进行设置。
首先,请检查您的IIS管理器中的Isapi和Cgi限制,其中是否包括.NET 4?哪些版本?启用了吗?
如果您进入IIS中的应用程序池,您的应用程序池是否设置为.NET 4新版本?请仔细检查,您的应用程序池可能设置为.NET 4框架的不同版本,因此已被删除/禁用。您可以尝试创建一个新的干净的应用程序池来测试它是否有效。
如果仍然没有解决问题,您可以尝试使用aspnet_regiis -i
重新在IIS中注册.NET。
如果这些都不起作用,我会尝试提供更多选项/想法。
我通常通过在 IIS 上重新安装 ASP.NET 支持文件来解决这类问题。
输入:
cd %WINDIR%\Microsoft.NET\Framework64\v4.0.XX.XX
aspnet_regiis -i
完成。您可能需要打开 IIS 并将应用程序池重新分配给新创建的“ASP.NET 4.0集成”(或经典)。
我的ASP.NET MVC应用程序也存在一些兼容性问题。也许你也有同样的问题。
我使用了NoSessionControllerFactory
来禁用基于SessionState的功能,参考了如何在ASP.NET MVC中禁用会话状态?和http://billrob.com/archive/2009/07/15/asp-net-mvc-without-sessionstate.aspx。但是在更新到.NET 4.0后,我的应用程序无法正常工作。我还收到了500个内部服务器错误。在从Global.asax.cs进行了小修改后,问题得到了解决。修复后的代码如下:
public class NoSessionControllerFactory: DefaultControllerFactory {
protected override IController GetControllerInstance (RequestContext requestContext, Type controllerType) {
if (controllerType != null) {
var controller = base.GetControllerInstance (requestContext, controllerType);
((Controller)controller).TempDataProvider =
new DummyTempDataProvider ();
return controller;
}
else
return null;
}
}
public class DummyTempDataProvider: ITempDataProvider {
public IDictionary<string, object> LoadTempData (ControllerContext controllerContext) {
return new Dictionary<string, object> ();
}
public void SaveTempData (ControllerContext controllerContext,
IDictionary<string, object> values) {
}
}
这个类将在 Global.asax.cs 中使用,例如:
protected void Application_Start () {
RegisterRoutes (RouteTable.Routes);
// see https://dev59.com/1nNA5IYBdhLWcg3wn_fD
ControllerBuilder.Current.SetControllerFactory (new NoSessionControllerFactory ());
}
我敢打赌这是与应用程序配置有关的问题。ASP.NET 4的配置与3.5不同。
此外,请确保您的Web应用程序引用的是.NET 4的DLL,而不是.NET 3.5的。