ASP.NET MVC на IIS6

Где я могу найти хорошие рекомендации по лучшим методам работы ASP.NET MVC на IIS6?

Я не видел никаких реалистичных вариантов для веб-хостов, которые пока еще предоставляют IIS7-хостинг. В основном потому, что я не живу в США

Поэтому мне было интересно, как лучше всего создавать приложения в ASP.NET MVC и сделать его доступным для развертывания как на IIS6, так и на IIS7. Имейте в виду, что это для стандартных веб-хостов, поэтому нет доступа к ISAPI-фильтрам или специальным настройкам внутри IIS6.

Есть ли что-нибудь еще, о чем следует подумать при разработке ASP.NET MVC-приложений для целевой IIS6? Любые функции, которые не работают?

ОБНОВЛЕНИЕ: Одна из самых больших проблем – дело с маршрутами. Шаблон {controller} / {action} будет работать на IIS7, но не IIS6, который нуждается в {controller} .mvc / {action}. Итак, как я могу сделать это прозрачным? Опять же, нет ISAPI и никаких настроек IIS , пожалуйста.

Мне потребовалось немного времени, но я понял, как заставить расширения работать с IIS 6. Сначала вам нужно переработать базовую маршрутизацию, чтобы включить .aspx, чтобы они были перенаправлены через фильтр ASP.NET ISAPI.

routes.MapRoute( "Default", // Route name "{controller}.aspx/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); 

Например, если вы переходите к Home.aspx, ваш сайт должен работать нормально. Но Default.aspx и адрес страницы по умолчанию http: // [веб-сайт] / перестают работать правильно. Итак, как это исправлено?

Ну, вам нужно определить второй маршрут. К сожалению, использование Default.aspx в качестве маршрута не работает должным образом:

 routes.MapRoute( "Default2", // Route name "Default.aspx", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); 

Итак, как вы это делаете? Ну, вот где вам нужен исходный код маршрутизации:

 routes.MapRoute( "Default2", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); 

Когда вы это сделаете, Default.aspx и http: // [веб-сайт] / оба начинают работать снова, я думаю, потому что они успешно отображаются на главный controller. Таким образом, полное решение:

 public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}.aspx/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); routes.MapRoute( "Default2", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } 

И ваш сайт должен начать работать отлично под IIS 6. (По крайней мере, это на моем ПК.)

И в качестве бонуса, если вы используете Html.ActionLink () на своих страницах, вам не нужно менять какую-либо другую строку кода на всем сайте. Этот метод обеспечивает правильную маркировку расширения .aspx для controllerа.

Поскольку вы не можете изменять настройки IIS для отображения .mvc в ASP.Net, вы можете использовать другое расширение, которое уже сопоставлено с ASP.Net. Например, вы можете использовать {controller} .ashx / {action}, и он должен работать из коробки в IIS 6.

Вам не нужно жить с этим расширением, если вы можете установить на сервере фильтр ISAPI.

В основном вы маршрутизируете URL-адреса для {controller} .mvc-разновидности, затем в ASP.NET вы переписываете этот url для удаления .mvc – при этом вам не нужно определять какие-либо дополнительные маршруты или выставлять .mvc своим пользователям.

Я написал об этом здесь: http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

и Стив Сандерсон тоже неплохо выглядит: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Как упоминалось в этом сообщении блога Phil Hack, можно настроить URL-адреса без расширения для ASP.NET MVC в IIS 6 с помощью сопоставлений приложений подстановочных знаков :

  1. В IIS 6 перейдите в Свойства конфигурации приложения для вашего веб-приложения ASP.NET MVC.
  2. Нажмите «Вставить …» в разделе «Карты подстановочных знаков».
  3. Установите исполняемый файл на путь aspnet_isapi.dll (на моей машине это c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll).
  4. Убедитесь, что НЕ проверять флажок «Проверить, существует ли файл» и нажмите «ОК».

Однако, как упоминалось также в Hack, это связано с некоторыми последствиями для производительности.

С IIS6 вы можете сделать одну из двух вещей:

  1. Настройка фильтра ISAPI для сопоставления URL-адресов MVC с ASP.NET
  2. Включите расширение в URL-адрес . Например: htp: //localhost/Home.mvc

Поскольку вариант 1 недоступен на большинстве веб-хостов, вам нужно перейти на номер 2.

Url-переписывание может помочь вам решить проблему. Я реализовал решение, позволяющее развертывать приложение MVC в любой версии IIS, даже если используется виртуальный хостинг. http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

У меня есть пример приложения на IIS6.

Я нашел быстрое и грязное решение. (Грязный, потому что он содержит имя по умолчанию с расширением). Он не требует дополнительного маршрута или чего-то особенного. (Кроме того, ваш маршрут по умолчанию должен иметь {controller} .aspx / {действие} … формат)

Здесь default.aspx

 <%@ Page Language="C#"%>  

Мое примерное действие по умолчанию приложения было индексом, в Домашнем каталоге.

Примечание. Я видел этот код в блоге Фила Хаака. Спасибо Брайану Лоу.

У меня есть подробное пошаговое руководство, но для этого требуется использовать isapi_rewrite. Просмотрите его по адресу: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

  • Горячее развертывание на JBoss - как мне заставить JBoss «видеть» изменение?
  • Каков наилучший способ использования веб-сервиса из VB6?
  • Сделать MSDeploy (Visual Studio) не удалять папку App_Data, но удалять все остальное
  • Универсальный ЭЛТ-модуль MSVC 2015 для локального развертывания приложений
  • Как я могу развернуть приложение .NET, использующее ODAC, без установки всего компонента пользователю?
  • .war vs .ear file
  • Развертывание проекта Maven throws java.util.zip.ZipException: недопустимый заголовок LOC (плохая подпись)
  • Существует ли компилятор R?
  • Dll как в бункере, так и в gac, который используется?
  • PhpStorm - преимущества редактирования развернутых файлов напрямую, а также загрузка и синхронизация
  • XamlParseException после развертывания проекта WPF
  • Давайте будем гением компьютера.