Я только что установил.NET 4 на Windows Server 2008 R2 x64, и я получаю 500 Внутренних Ошибок Сервера с приложением MVC ASP.NET, которое ранее хорошо работало на 3,5. Приложение было обновлено от предназначения 3.5 для предназначения 4, и я лично создал его сегодня на моей машине разработки (измененный в VS - Свойства к Платформе.NET 4).
На сервере я установил Платформу.NET 4 Клиентских профиля и Полный оба автоматически через Установщик Веб-платформы. ASP.NET MVC 2 был также установлен через Установщик Платформы. Я создал новую.NET 4 пула приложений в IIS и поместил веб-приложение в него.
Также мне выключили пользовательские ошибки в web.config, но несмотря на это никакая подробная ошибка не отображена - просто простой IIS 7.5 500 Внутренняя Ошибка Сервера.
Какие-либо предложения?
Что ж, это очень странная и интересная проблема .. Но я очень хочу помочь, чем могу. Я в настоящее время у меня есть VPS с Server 2008 R2, и я установил на нем .NET 4 RTM и MVC 2.Не думаю, что я столкнулся с проблемами конфигурации, но мне пришлось помочь настроить его другим людям ..
Сначала не могли бы вы проверить .. в вашем диспетчере IIS, ограничения Isapi и Cgi, есть ли у вас .NET 4 там? Какие версии? они включены?
Если вы перейдете к своим пулам приложений в IIS, поддерживаются ли ваши пулы приложений для .NET 4, НОВОЙ версии? Дважды проверьте это, ваши пулы приложений могут быть настроены на другую сборку платформы .NET 4, которая с тех пор была удалена / отключена. Вы можете попробовать создать НОВЫЙ веб-сайт с новым чистым пулом приложений, чтобы проверить, работает ли он.
Если ничего не работает, вы можете попробовать повторно зарегистрировать .NET в IIS с помощью aspnet_regiis -i
Если ничего из этого не сработает, я постараюсь вернуться с еще несколькими вариантами / идеями
Обычно я решаю такие проблемы, переустанавливая файлы поддержки ASP.NET на IIS.
Введите:
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 Internal Server Error. После небольшой модификации 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 https://stackoverflow.com/questions/884852/how-can-i-disable-session-state-in-asp-net-mvc
ControllerBuilder.Current.SetControllerFactory (new NoSessionControllerFactory ());
}
Готов поспорить, что это проблема конфигурации рассматриваемого приложения. Конфигурация ASP.NET 4 отличается от конфигурации 3.5.
Также убедитесь, что ваше веб-приложение ссылается на библиотеки DLL из .NET 4, а не .NET 3.5.