.NET Framework 4 RTM на Windows Server 2008 R2 - PullRequest
5 голосов
/ 16 марта 2010

Я только что установил .NET 4 на Windows SErver 2008 R2 x64 и получаю 500 внутренних ошибок сервера с приложением ASP.NET MVC, которое ранее работало на 3.5. Приложение было обновлено с целевого уровня 3,5 до целевого уровня 4, и я лично создал его сегодня на своей машине для разработки (изменено в VS - Свойства на .NET Framework 4).

На сервере я установил .NET Framework 4 Client profile и Full автоматически через установщик веб-платформы. ASP.NET MVC 2 также был установлен через установщик платформы. Я создал новый пул приложений .NET 4 в IIS и поместил в него веб-приложение.

Также в web.config отключены пользовательские ошибки, но даже при этом подробные ошибки не отображаются - только простая внутренняя ошибка сервера IIS 7.5 500.

Есть предложения?

Ответы [ 4 ]

6 голосов
/ 24 апреля 2010

Ну, это очень странная и интересная проблема. Но я очень хочу помочь, насколько смогу. В настоящее время у меня есть VPS с Server 2008 R2, и я установил .NET 4 RTM и MVC 2 на нем. Не думаю, что я столкнулся с проблемами конфигурации, но я должен был помочь настроить некоторых других людей с этим ..

Изначально, не могли бы вы проверить ... в вашем менеджере IIS ограничения Isapi и Cgi, есть ли у вас .NET 4? Какие версии? они включены?

Если вы заходите в пулы приложений в IIS, ваши пулы приложений работают с .NET 4, НОВОЙ версией? Дважды проверьте это, ваши пулы приложений могут быть настроены на другую сборку платформы .NET 4, которая с тех пор была удалена / отключена. Вы можете попробовать создать НОВЫЙ веб-сайт с новым чистым пулом приложений, просто чтобы проверить, работает ли он.

Если ничего не работает, попробуйте перерегистрировать .NET в IIS с aspnet_regiis -i

Если ничего из этого не сработает, я постараюсь вернуться с некоторыми вариантами / идеями

4 голосов
/ 24 апреля 2010

Обычно я решаю такую ​​проблему, переустанавливая файлы поддержки ASP.NET в IIS.

  1. Открыть командную строку с правами администратора (Командная строка, щелкните правой кнопкой мыши, Запуск от имени администратора)
  2. Введите:

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

    aspnet_regiis -i

Готово. Возможно, вам придется открыть IIS и переназначить пулы приложений на только что созданный «ASP.NET 4.0 Integrated» (или Classic).

0 голосов
/ 27 апреля 2010

Могу поспорить, что это проблема конфигурации с данным приложением. Конфигурация ASP.NET 4 отличается от конфигурации 3.5.

А также убедитесь, что ваше веб-приложение ссылается на DLL из .NET 4, а не .NET 3.5.

0 голосов
/ 27 апреля 2010

У меня также небольшие проблемы с совместимостью с моим приложением 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 внутренних ошибок сервера. После небольшой модификации NoSessionControllerFactory из 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 /699790/kak-otklychit-sostoyanie-seansa-v-asp-net-mvc
    ControllerBuilder.Current.SetControllerFactory (new NoSessionControllerFactory ());
}
...