代码之家  ›  专栏  ›  技术社区  ›  mare

Windows Server 2008 R2上的.NET Framework 4 RTM

  •  5
  • mare  · 技术社区  · 15 年前

    我刚在Windows Server 2008 R2 x64上安装了.NET 4,并且我在一个ASP.NET MVC应用程序上遇到500个内部服务器错误,该应用程序以前在3.5上运行正常。该应用程序已从目标3.5升级到目标4,我今天在我的开发机器上亲自构建了它(在vs-properties中更改为.NET Framework 4)。

    在服务器上,我通过Web平台安装程序自动安装了.NET Framework 4客户端配置文件和完整配置文件。ASP.NET MVC 2也通过平台安装程序安装。我在IIS中创建了一个新的.NET 4应用程序池,并将Web应用程序放在其中。

    另外,我在web.config中关闭了自定义错误,但即使如此,也没有显示详细的错误-只是简单的IIS7.5500内部服务器错误。

    有什么建议吗?

    4 回复  |  直到 14 年前
        1
  •  6
  •   Artiom Chilaru    14 年前

    嗯,这是一个非常奇怪和有趣的问题……但我渴望尽我所能提供帮助。 我现在有一个带有Server2008R2的VPS,我已经在上面安装了.NET 4RTM和MVC 2。不要以为我遇到了配置问题,但我必须帮助其他人设置它。

    最初,你能查一下……在您的IIS管理器、ISAPI和CGI限制中,是否有.NET 4?哪些版本?它们启用了吗?

    如果您转到IIS中的应用程序池,您的应用程序池是否为.NET 4的新版本?仔细检查,您的应用程序池可能被设置为.NET 4框架的另一个版本,该版本已被删除/禁用。你可以尝试创建一个新的网站和一个新的清洁应用程序池只是测试它是否工作。

    如果还没有工作,您可以尝试在IIS中重新注册.NET aspnet_regiis -i

    如果这些都不起作用,我会再提一些选择/想法。

        2
  •  4
  •   Fábio Batista Raza Ahmed    14 年前

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

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

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

      aspnet_regiis -i

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

        3
  •  0
  •   Community CDub    7 年前

    我的ASP.NET MVC应用程序也存在一些小的兼容性问题。可能你也有同样的问题。

    我用过 NoSessionControllerFactory 基于禁用sessionstate How can I disable session state in ASP.NET MVC? http://billrob.com/archive/2009/07/15/asp-net-mvc-without-sessionstate.aspx 。在更新到.NET 4.0之后,我的应用程序无法工作。我还收到了500个内部服务器错误。小修改后 鼻会话控制器工厂 全球.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) {
        }
    }
    

    该类将在 全球.asax.cs 像:

    protected void Application_Start () {
        RegisterRoutes (RouteTable.Routes);
    
        // see https://stackoverflow.com/questions/884852/how-can-i-disable-session-state-in-asp-net-mvc
        ControllerBuilder.Current.SetControllerFactory (new NoSessionControllerFactory ());
    }
    
        4
  •  0
  •   Venemo    14 年前

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

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