2010-05-24 3 views
5

Я создал приложение ASP.NET MVC 2 в Visual Studio 2008. Я установил сборку релиза, чтобы пройти через компилятор ASP.NET, чтобы предварительно скомпилировать все представления, минимизировать Javascript и CSS, очистка web.config и т. Д. Поскольку производственное развертывание идет на сервер IIS6, я настроил свое псевдопроизводственное развертывание на моем компьютере под управлением Windows 7, чтобы пул приложений выполнялся в классическом режиме с таргетингом на среду выполнения 2.0 , Я настроил обработчик без расширения в файле web.config, который необходим, и все отлично работает.Развертывание ASP.NET MVC 2 для IIS 7.5 таргетинга .NET 3.5

Проблема возникла, когда я обновил решение до Visual Studio 2010. Я по-прежнему нацелился на фреймворк 3.5, но теперь я использую MSBuild 4.0, так как это то, что использует Visual Studio 2010. Все все правильно компилируется, потому что он отлично работает под Cassini, но когда я развертываю его в одном месте (тот же пул приложений, идентификатор и т. Д.), Он теперь ведет себя по-другому. У меня все еще есть обработчик без расширения в web.config, но теперь, когда я перехожу к корню приложения, он просматривает каталоги, и все маршруты, которые он ранее обрабатывал, теперь возвращаются, поскольку 404 ошибки обрабатываются обработчиком StaticFile в IIS , Я в недоумении за то, что изменилось и вызывает перерыв.

Я просмотрел this question, но я уже проверил, что все компоненты необходимых компонентов установлены.

ответ

3

Вы пытались отладить свои маршруты, используя Phil Haack route debugger на сервере?

Edit:
В IIS 7.5 вам не нужен никакой специальный обработчик extensionless, это автоматически, вам не нужно ничего менять. Насколько мне известно, это необходимо только для IIS 6. Это может быть проблема? что, если вы удалите этот специальный обработчик? возможно, это то, что останавливает его, чтобы ударить по двигателю маршрута.

Edit:
я проверил, и, как я думал, что, начиная с IIS7, режим по умолчанию для AppDomain является Интегрированный режим. Это означает, что стек Asp.net запускается при каждом запросе, в то время как в классическом режиме asp.net вызывается только тогда, когда определенные расширения, на которые вызывается (aspx ashx axd, по умолчанию отображаются в aspnet_isapi-фильтр).
UrlRoutingModule пинается по каждому запросу, не требуя от вас ничего, потому что это HttpModule, а не обработчик. (его просто нужно зарегистрировать в файле конфигурации вашего приложения, нет необходимости сопоставлять его с расширением, но это по умолчанию в приложении MVC. Вы можете открыть файл Web.Config и убедиться, что у вас есть a узел

<modules runAllManagedModulesForAllRequests ="true"> 
... 
<add name="UrlRoutingModule" type=.../> 
</modules> 

вы уверены, что развертывание MVC сборки на сервер? убедитесь, что System.Web.Mvc, System.Web.Routing и System.Web.Abstraction ссылки имеют копию Локальное свойство установлено в true, чтобы быть уверенным, что вы используете одни и те же сборки локально и на вашем производственном сервере ...

Если все это правильно, я не знаю, как помочь вам больше ... Надеюсь, это поможет вам или по крайней мере поместит вас на правильные пути.

EDIT: Oww ... только что прочитал ваш последний комментарий ... извините, я пропустил этот элемент в классическом режиме. В вашем названии упоминается IIS7.5, и я принял слишком много вещей.вот почему я смутился.

В последнее время мне пришлось посмотреть в книге Стивена Сандерсона. У него есть контрольный список для устранения неполадок развертывания IIS6. Я знаю, что вы говорите, что это только при использовании MSBuild 4, что он терпит неудачу, но он может быть полезен

Убедитесь, что Default.aspx установлен как страница контента по умолчанию. Это может быть источником 404.

Затем, чтобы иметь неограниченные URL-адреса, в прошлый раз, когда я развернулся к IIS6, я использовал простую карту подстановочных знаков, и у меня никогда не было проблемы ... Если вам все еще жаль, что я could'nt помощь ... не то, что я не стараюсь :) удачи

+0

Это не ударять механизм маршрутизации. Это проблема. Несмотря на то, что конфигурация web.config настроена, IIS, похоже, игнорирует ее и возвращает стандарт 404. Включение трассировки IIS показывает, что обработчики и модули маршрутизации не выполняются. –

+0

В ответ на ваше редактирование мне нужен был обработчик, когда он был скомпилирован с использованием MSBuild 3.5. В противном случае IIS не знает, как отправить страницу через механизм маршрутизации. –

+0

hm, я немного смущен, потому что Build ничего не должен менять вообще в отношении обработки запросов. Ваша проблема, похоже, произойдет еще до того, как вы нажмете приложение. Не могли бы вы проверить, что ваш пул приложений работает в интегрированном режиме?Я должен уйти сейчас, но позже я отправлю расширенный ответ. –

0

Пара идей попробовать

  • Столкнулись любые сравнения между выходом VS2008 и VS2010 проектов? Просто проверяя, что обновление решения не изменило ни одного .
  • У вас есть web.config атрибут targetFramework, установленный на compilation элемент?
  • Вы уверены, что не используете во что-то вроде запуска приложения x86 в пуле приложений x64?

Я предполагаю, что с тобой все в порядке, но поскольку у Кассини нет проблем с приложением, я все же склоняюсь к проблемам web.config. У вас есть ваши модули/обработчики, правильно зарегистрированные в элементе? Поскольку вы используете классический режим, вам понадобятся как «старые», так и «новые» (reference 1, reference 2).

+0

в файле web.config нет targetFramework, но у меня есть targetFrameworkVersion, установленная в самом файле проекта. Поскольку я предварительно компилирую его и развертывая его в IIS в обоих сценариях, я не знаю, нужен ли web.config. Что касается выходов между ними, сложно выполнить двоичное сравнение, так как я использую Entity Framework, и он должен внести некоторые изменения в него для набора инструментов VS2010. –

+0

Быстрое обновление. Я попытался установить атрибут targetFramework в элементе компиляции и попытаться построить проект, в результате чего VS2010 сказал, что это необязательно до таргетинга на фреймворк 4.0. Кроме того, я сомневаюсь, что это проблема x86 vs x64, поскольку я компилирую и выполняю строго на оборудовании x86 и ОС. –

+0

Любая удача с регистрацией модуля/обработчика в web.config? Это выглядело наиболее перспективным и соответствовало «симптомам». – Josh

-3

Я уже разместил это решение в другом потоке, но повторюсь. Использование классический режим трубопровода AppPool:

alt text http://img823.imageshack.us/img823/3684/20100612135212.png

Также dot't забудьте установить HTTP Перенаправление модуль в Turn Windows, или отключение компонентов.

+0

Если вы посмотрели мои ответы на @stephanie, вы увидите, что я уже запускаю AppPool в классическом режиме. И если бы вы посмотрели на ссылку в вопросе, я сказал, что у меня есть необходимые компоненты, которые уже установлены (включая перенаправление HTTP). –

2

Я испытал эту проблему сегодня, в аналогичном сценарии.

Проблема в моем случае состояла в том, что вместо 64 бит была зарегистрирована 32 бита asp, что вызвало проблему с маршрутизацией.

Она была решена, введя в командной строке

CD c:\windows\microsoft.net\framework64\v4.0.30319 
aspnet_regiis -i 
+0

Я сначала изменяю пул приложений на v4.0, который удалил ошибку, однако ISS не загружала приложение MVC (вместо этого пыталась показать каталог) после выполнения вышеприведенных команд (казалось, установила .net 4) приложение запустило (так же, как с помощью сервера visual studio dev). –

Смежные вопросы