2010-03-16 94 views
5

我刚刚在Windows SErver 2008 R2 x64上安装了.NET 4,而且以前在3.5上运行良好的ASP.NET MVC应用程序出现500内部服务器错误。应用程序从目标3.5升级到目标4,我个人在开发机器上构建了它(在VS - 属性中更改为.NET Framework 4)。Windows服务器2008 R2上的.NET Framework 4 RTM

在服务器上,我通过Web Platform Installer自动安装了.NET Framework 4 Client Profile和Full。 ASP.NET MVC 2也通过Platform Installer安装。我在IIS中创建了一个新的.NET 4应用程序池,并将Web应用程序放入其中。

另外我有自定义错误在web.config中关闭,但即使如此没有显示详细的错误 - 只是普通的IIS 7.5 500内部服务器错误。

有什么建议吗?

+0

您是否只在服务器或完整框架上安装客户端配置文件? – 2010-03-16 13:10:28

+0

我会首先建议打开错误,找出更多,开始... – 2010-03-16 13:10:36

+0

@Mauricio:正如它在问题中所述,我安装了客户端配置文件。 @Rowlad:你的意思是打开或关闭?目前CUSTOM错误是关闭的,所以它应该显示详细的例外。 – mare 2010-03-16 13:27:28

回答

6

那么,这是一个非常奇怪和有趣的问题..但我渴望尽可能地帮助。 我目前得到了Server 2008 R2的VPS,并且已经安装了.NET 4 RTM和MVC 2。不要以为我遇到配置问题,但我不得不帮助设置一些其他人..

最初,你可以检查..在你的IIS经理,Isapi和Cgi的限制,你呢有.NET 4在那里?哪些版本?他们是否启用?

如果您转到IIS中的应用程序池,您的应用程序池是否适用于.NET 4,NEW版本?仔细检查一下,你的应用程序池可能被设置为.NET 4框架的不同版本,这已经被删除/禁用。您可以尝试使用新的干净应用程序池创建一个新网站,以测试它是否有效。

如果实在不行的是,你可以尝试在IIS与aspnet_regiis -i

重新注册.NET如果没有这些工作,我会尝试一些更多选项/想法

+0

我想知道你的解决方案的哪一部分解决了这个问题? – 2010-11-24 16:21:22

+3

转到IIS管理器,并检查“Isapi和Cgi限制区域”。如果.NET 4在那里 - 确保它被允许执行。 – 2010-11-26 09:59:39

+1

如果.NET不存在 - 您必须先运行“aspnet_regiis -i”。 – 2010-11-26 10:00:45

4

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

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

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

    aspnet_regiis -i

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

+0

我的配置很好,我有新的ASP.NET 4应用程序池。问题是我正在虚拟目录中运行我的应用程序,并且Web.Config继承似乎有问题。 我刚刚测试在IIS中创建一个新的根网站,并将其放入.NET 4集成的应用程序池,它工作正常。 – mare 2010-04-24 19:28:17

0

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

我使用NoSessionControllerFactory来禁用基于How can I disable session state in ASP.NET MVC?http://billrob.com/archive/2009/07/15/asp-net-mvc-without-sessionstate.aspx的SessionState。更新到.NET 4.0后,我的应用程序无法正常工作。我还收到500内部服务器错误。 NoSessionControllerFactoryGlobal.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://stackoverflow.com/questions/884852/how-can-i-disable-session-state-in-asp-net-mvc 
    ControllerBuilder.Current.SetControllerFactory (new NoSessionControllerFactory()); 
} 
0

我敢打赌,这是一个配置问题所涉及的应用。 ASP.NET 4的配置与3.5不同。

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

相关问题