#asp.net-mvc-2 #iis-6 #web-deployment-project #asp.net-mvc-areas
#asp.net-mvc-2 #iis-6 #веб-развертывание-проект #asp.net-mvc-areas
Вопрос:
У меня есть ASP.NET Приложение MVC 2 работает нормально как на IIS7, так и на сервере веб-разработки VS. Недавно я добавил области на сайт, и они тоже отлично работают на IIS7 и сервере веб-разработки VS.
Однако, когда я развертываю этот сайт на тестовом сервере IIS6 под управлением win2k3, области больше не работают. Все пути, использующие маршруты по умолчанию для остальной части сайта, работают нормально (например, /Home/Index/ ), однако при переходе в область (например, /Admin/Users/Index/ ) я получаю исключение HttpException:
System.Web.HttpException: Сервер не может получить доступ к каталогу приложений ‘C:InetPubMobileWebAdmin ‘. Каталог не существует или недоступен из-за настроек безопасности.
C:InetPubMobileWeb
это корневой каталог моего сайта. Если я добавляю каталог администратора в файловую систему, я получаю различные ошибки при загрузке сборки, но я почти уверен, что этого не произойдет, если я смогу заставить области работать правильно.
Все, что я сделал (и делал много раз раньше), чтобы включить ASP.NET MVC на IIS6 должен был добавить обработчик подстановочных знаков, который сопоставляется C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll
и снимает флажок «проверить, что файл существует».
Наш сервер сборки автоматически развертывает этот код, компилируя проект развертывания VS 2008, а затем копируя выходные данные на наш тестовый сервер. Я нашел эту статью, в которой есть аналогичная проблема, но, если я правильно понимаю разрешение, у меня это не сработало.
Есть ли что-то уникальное, что мне нужно сделать, чтобы заставить области работать на IIS6?
Обновление — вот полная трассировка стека:
[HttpException (0x80004005): Server cannot access application directory 'C:InetPubMobileWeb'. The directory does not exist or is not accessible because of security settings.]
System.Web.HttpRuntime.EnsureAccessToApplicationDirectory() 8932031
System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags) 87
[HttpException (0x80004005): Server cannot access application directory 'C:InetPubMobileWeb'. The directory does not exist or is not accessible because of security settings.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) 8894095
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) 85
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) 259
Обновить
Я попытался опубликовать на тестовом сервере, используя как веб-сайт публикации VS2008, так и проект веб-развертывания VS2008 (и вручную копируя файлы) — у обоих одна и та же проблема.
Комментарии:
1. Работает ли маршрут, не относящийся к области, даже если он более сложный, чем по умолчанию? Например.
/iis6/die/already/666
?2. Что вы обнаружили в результате отладки маршрута? «Находит» ли он маршрут?
3. @bzlm — у меня действительно нет маршрутов более сложных, чем стандартный / controller / action / id?url_params=stuff, и все они работают
4. @NickDeVore отладка маршрута не работает для маршрутов области, я получаю ту же ошибку «сервер не может получить доступ к каталогу приложений», что и выше — он даже не выполняет код отладки маршрута
5. Я знаю, что у вас нет таких маршрутов. Я думаю, вам следует создать их, чтобы помочь точно определить проблему. 🙂
Ответ №1:
Похоже, что это разрешения на уровне каталога для этой папки. Я предполагаю, что группа «Все» имеет доступ на чтение к этому каталогу. Есть ли какая-либо учетная запись, которой запрещен доступ к этому каталогу?
Комментарии:
1. c:InetPubMobileWeb Если процесс IIS не может получить к нему доступ, то именно такую ошибку вы можете получить
2. Но тогда почему он получает ошибки компилятора в новом каталоге? Что-то не так. Не так уж и сложно получить разрешения, особенно учитывая, что проблемы возникают именно в новом каталоге.
3. В соответствии с вопросом нет «нового каталога», просто веб-приложение, недавно развернутое в IIS 6.
4. Я основываю это на сообщении об ошибке. Он говорит, что не может получить доступ к этой папке. Если мой ответ неверен, опубликуйте свое предложение.
5. @Nick DeVore — это корень проблемы. папки администратора нет и не должно быть — это просто часть маршрута, который MVC должен использовать для определения области MVC, где можно найти контроллер и действие.
Ответ №2:
Маловероятно, что у вас была та же проблема, что и у меня, но на случай, если вы это сделали, вот мое решение:
Я добавил новую область «admin» и получал эту ошибку всякий раз, когда переходил на любую страницу в новой области, однако все остальные области работали нормально.
Эта новая область заменила старое приложение web forms, которое размещалось на виртуальном сайте под основным приложением в IIS. Корень виртуального сайта был site.com/admin /.
Старые файлы приложений были удалены из файловой системы, однако сайт IIS все еще был активен. Всякий раз, когда поступал запрос на /admin/ … это было обработано старым приложением, которое (правильно) не смогло найти корень приложения, поэтому оно выдало исключение.