ASP.NET MVC на IIS6
Где я могу найти хорошие рекомендации по лучшим методам работы ASP.NET MVC на IIS6?
Я не видел никаких реалистичных вариантов для веб-хостов, которые пока еще предоставляют IIS7-хостинг. В основном потому, что я не живу в США
Поэтому мне было интересно, как лучше всего создавать приложения в ASP.NET MVC и сделать его доступным для развертывания как на IIS6, так и на IIS7. Имейте в виду, что это для стандартных веб-хостов, поэтому нет доступа к ISAPI-фильтрам или специальным настройкам внутри IIS6.
- Как установить регистр переменной для сохранения между играми в недоступном?
- Использование Maven для развертывания
- Лучшие практики ILMerge
- Определение версии сборки во время события после сборки
- Выбор устройства для Android - мое устройство кажется офлайн
Есть ли что-нибудь еще, о чем следует подумать при разработке ASP.NET MVC-приложений для целевой IIS6? Любые функции, которые не работают?
ОБНОВЛЕНИЕ: Одна из самых больших проблем – дело с маршрутами. Шаблон {controller} / {action} будет работать на IIS7, но не IIS6, который нуждается в {controller} .mvc / {action}. Итак, как я могу сделать это прозрачным? Опять же, нет ISAPI и никаких настроек IIS , пожалуйста.
- Android Studio не развертывает изменения в приложении
- Как найти полное имя сборки?
- Ошибка развертывания Heroku H10 (приложение разбилось)
- Как изменить цвет фона в меню параметров?
- Как вручную установить веб-сервис на Tomcat 6?
- System.IO.FileNotFoundException: не удалось загрузить файл или сборку «X» или одну из ее зависимостей при развертывании приложения
- Как развернуть приложение JAX-RS?
- Приложение Java EE Enterprise: выполните некоторые действия по развертыванию / запуску
Мне потребовалось немного времени, но я понял, как заставить расширения работать с 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 с помощью сопоставлений приложений подстановочных знаков :
- В IIS 6 перейдите в Свойства конфигурации приложения для вашего веб-приложения ASP.NET MVC.
- Нажмите «Вставить …» в разделе «Карты подстановочных знаков».
- Установите исполняемый файл на путь aspnet_isapi.dll (на моей машине это c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll).
- Убедитесь, что НЕ проверять флажок «Проверить, существует ли файл» и нажмите «ОК».
Однако, как упоминалось также в Hack, это связано с некоторыми последствиями для производительности.
С IIS6 вы можете сделать одну из двух вещей:
- Настройка фильтра ISAPI для сопоставления URL-адресов MVC с ASP.NET
- Включите расширение в 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/