Я безуспешно пытаюсь установить приложение MVC3 на наш производственный сервер. Приложение создано сторонним поставщиком (скомпилировано), поэтому отладка мне недоступна. Кроме того, я сильно подозреваю, что ошибка возникает до того, как любой код на сайте успевает выполнить.
Наш промежуточный сервер - насколько я могу судить - настроен точно так же, как и рабочий сервер. Оба работают под управлением Windows Server 2008 Standard R2, оба также используют сайт Sharepoint 2010 (хотя эта установка никоим образом не затрагивает этого). IIS - это версия 7.5, а .NET Framework 4.0 (требуется для приложения MVC) (недавно) установлен (мной, с последующей перезагрузкой). Приложение очень маленькое и простое и, насколько я могу судить, придерживается довольно стандартных функций, включая проверку подлинности с помощью форм (т.е. оно не тянет никаких грязных уловок).
Сообщение об ошибке, отображаемое в браузере, является очень общим:
HTTP Error 500.0 - Internal Server Error
An error message detailing the cause of this specific request failure
can be found in the application event log of the web server. Please review
this log entry to discover what caused this error to occur.
То, что сообщение об ошибке с подробным описанием причины находится в журнале событий приложения, кажется просто домыслом - благочестивой надеждой на то, что какой-либо код действительно вызвал ошибку, она будет записана. Ничего полезного в журнале событий не обнаружено (только то же самое сообщение, зарегистрированное IIS).
Module: AspNetInitClrHostFailureModule
Notification: BeginRequest
Handler: StaticFile
Error Code: 0x80070002
Requested URL: http://xxxxxx.xxxxxx.xx:80/
Physical Path: C:\Xxxxxxx\Prod\WebClient
Logon Method: Not yet determined
Logon User: Not yet determined
Используя отслеживание неудачных запросов, я смог отследить ошибку (как также указано выше) в AspNetInitClrHostFailureModule:
103. -NOTIFY_MODULE_START
ModuleName AspNetInitClrHostFailureModule
Notification 1
fIsPostNotification false
Notification BEGIN_REQUEST
104. -SET_RESPONSE_ERROR_DESCRIPTION
ErrorDescription An error message detailing the cause of this specific
request failure can be found in the application event log of the web server.
Please review this log entry to discover what caused this error to occur.
105. -MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName AspNetInitClrHostFailureModule
Notification 1
HttpStatus 500
HttpReason Internal Server Error
HttpSubStatus 0
ErrorCode 2147942402
ConfigExceptionInfo
Notification BEGIN_REQUEST
ErrorCode The system cannot find the file specified. (0x80070002)
Вот и все. Похоже, AspNetInitClrHostFailureModule не может найти какой-то файл. Итак, некоторые вопросы:
Что AspNetInitClrHostFailureModule? Его нет в довольно исчерпывающем списке модулей, настраиваемых в диспетчере IIS для сайта. У меня тоже не получилось погуглить. Может это секрет ..
Я получаю доступ к корневому URL-адресу сайта. Предполагается, что это должно быть перенаправлено в / Account / LogOn модулем FormsAuthenticationModule. Почему тогда обработчик StaticFile? Это подсказка?
Я попытался удалить печально известную систему .webserver / modules /runAllManagedModulesForAllRequests атрибут, и это устраняет ошибку (но MVC, конечно, не работает). Я готов указать все необходимые модули вручную, если это то, что нужно, но если AspNetInitClrHostFailureModule действительно нужен, я так же застряну. Кто-нибудь знает, или может ли кто-нибудь направить меня к тому, кто знает, какие именно модули действительно нужны типичному приложению MVC3?
Этот вопрос вполне может быть дубликатом вот этот, но он не получил никакого полезного ответа, а также задал менее конкретные вопросы. Так что я пойду по-своему.
Надеюсь на помощь здесь :)
Редактировать: Теперь я попытался настроить на сервере простой проект MVC 3. Я создал новый проект, используя шаблон MVC Application, скомпилировал его и развернул на сервере. Он ведет себя точно так же. Сервер просто не может запускать проекты MVC 3.
Грубое предположение :
поскольку это выглядит как неудачная загрузка модуля, проверяли ли вы, что параметры пула приложений, связанного с вашим веб-сайтом, установлены для правильной версии .Net? DefaultAppPool - это .net v2.0. MVC, вероятно, должен быть в «Интегрированном» пуле приложений «v4.0» (имя по умолчанию ASP.NET v4.0).
Я бы удалил и переустановил ASP.NET. У меня возникли проблемы после установки .NET Framework, которые я делаю сейчас почти постоянно.
Чтобы удалить:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ua
Чтобы переустановить:
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i
Если вам нужно запускать 32-разрядные приложения, вам также необходимо запустить aspnet_regiis в папке C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319. Обратите внимание, что выполнение переустановки повлияет на другие веб-приложения ASP.NET, если они работают.
Поскольку проблема возникает так рано, может быть полезно включить ведение журнала .NET Framework Fusion. Это сделано для предоставления подробной информации о том, что происходит во время загрузки сборок.
Если все сборки загружаются нормально, я бы использовал Process Monitor, чтобы получить трассировку. Это может указать вам правильное направление того, что он делал в момент неудачи.
http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx
Если это проблема отсутствующей сборки, вы можете определить, какие сборки нужны вашему приложению, проверив манифест. Это можно сделать с помощью ildasm.exe (дизассемблер IL) или ILSpy.
Я видел, как многие приложения MVC вылетали при запуске с бессмысленным сообщением об ошибке, когда они вводились на новом сервере, потому что сборка (dll) существовала в процессе разработки или тестирования, но не на новом сервере. Если это так, это может быть одна из следующих сборок, которые необходимо скопировать в папку bin веб-сайта:
Microsoft.Web.Infrastructure.dll
System.Net.Http.dll
System.Net.Http.Formatting.dll
System.Net.Http.WebRequest.dll
System.Web.Extensions.dll
System.Web.Helpers.dll
System.Web.Http.dll
System.Web.Http.SelfHost.dll
System.Web.Http.WebHost.dll
System.Web.Mvc.dll
System.Web.Optimization.dll
System.Web.Providers.dll
System.Web.Razor.dll
System.Web.WebPages.Deployment.dll
System.Web.WebPages.dll
System.Web.WebPages.Razor.dll
Когда вы устанавливаете собственно msi ASP.NET MVC, он обычно копирует многие из этих файлов в папку в C: \ Program Files x86 или где-нибудь в C: \ Windows \ winsxs (глобальный кеш сборок).
Обратите внимание, что эта проблема также может возникнуть, если поставщик подписывает свои сборки, но они подписаны с задержкой. Это также будет показано в журнале Fusion. Описание этого симптома находится здесь:
Отложить подписание сборки
http://msdn.microsoft.com/en-us/library/t07a3dye.aspx