在Windows Server 2008 R2上安装.NET Framework 4 RTM

5
我刚刚在 Windows Server 2008 R2 x64 上安装了 .NET 4,但是之前在 3.5 上运行良好的 ASP.NET MVC 应用程序现在出现了 500 内部服务器错误。该应用程序已从 3.5 升级到 4,并且我今天在开发机上进行了构建(在 VS 中更改为 .NET Framework 4)。
在服务器上,我通过 Web Platform Installer 自动安装了 .NET Framework 4 客户端框架和完整版。同时,ASP.NET MVC 2也通过平台安装器安装。我在 IIS 中创建了一个新的 .NET 4 应用程序池,并将 Web 应用程序放入其中。
此外,我在 web.config 中关闭了自定义错误,但即使如此,也没有显示详细错误信息 - 只有普通的 IIS 7.5 500 内部服务器错误。
有什么建议吗?

你在服务器上只安装了客户端框架还是完整的框架? - Mauricio Scheffer
我建议先打开错误提示,以便开始时了解更多情况。 - Rowland Shaw
我把这个问题留到了 .NET 4 RTM 版本之后,现在我们已经有了它,我通过 Web 平台安装程序删除了 RC 并安装了 4 RTM。但是同样的错误仍然存在,应用程序或系统日志中没有任何事件记录。 - mare
如果您通过Visual Studio调试模式启动应用程序,它是否在您的计算机上运行?默认情况下,Visual Studio使用自己的Web服务器,而不是IIS,这些信息可能会有所帮助。 - PeteT
该应用程序在VS Web服务器中运行,并且在IIS中也是如此,如果它位于网站的根级别上 - 因此,如果它不在已转换为应用程序的子目录中。 - mare
显示剩余2条评论
4个回答

6

好的,这是一个非常奇怪而有趣的问题.. 但我很乐意尽我所能帮助你。

目前我有一个安装了.NET 4 RTM和MVC 2的Server 2008 R2 VPS。不认为我遇到了配置问题,但我确实帮助过其他人进行设置。

首先,请检查您的IIS管理器中的Isapi和Cgi限制,其中是否包括.NET 4?哪些版本?启用了吗?

如果您进入IIS中的应用程序池,您的应用程序池是否设置为.NET 4新版本?请仔细检查,您的应用程序池可能设置为.NET 4框架的不同版本,因此已被删除/禁用。您可以尝试创建一个新的干净的应用程序池来测试它是否有效。

如果仍然没有解决问题,您可以尝试使用aspnet_regiis -i重新在IIS中注册.NET。

如果这些都不起作用,我会尝试提供更多选项/想法。


3
请打开IIS管理器,并检查“Isapi和Cgi限制区域”。如果出现.NET 4,请确保允许其执行。 - Artiom Chilaru
1
如果没有安装.NET,您必须首先运行“aspnet_regiis -i”。 - Artiom Chilaru

4

我通常通过在 IIS 上重新安装 ASP.NET 支持文件来解决这类问题。

  1. 以管理员权限打开命令提示符(命令提示符,右键单击,以管理员身份运行)
  2. 输入:

    cd %WINDIR%\Microsoft.NET\Framework64\v4.0.XX.XX

    aspnet_regiis -i

完成。您可能需要打开 IIS 并将应用程序池重新分配给新创建的“ASP.NET 4.0集成”(或经典)。


我的配置没问题,我有新的ASP.NET 4应用程序池。问题是我在虚拟目录中运行我的应用程序,Web.Config继承似乎出了点问题。我刚刚测试了在IIS中创建一个新的根网站,并将其放入.NET 4集成应用程序池中,它可以正常工作。 - mare

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 ());
}

0

我敢打赌这是与应用程序配置有关的问题。ASP.NET 4的配置与3.5不同。

此外,请确保您的Web应用程序引用的是.NET 4的DLL,而不是.NET 3.5的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接