ASP.NET Области MVC2, не работающие в IIS6

#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/ … это было обработано старым приложением, которое (правильно) не смогло найти корень приложения, поэтому оно выдало исключение.