Использование ASP.NET MVC с разными версиями служб IIS (VB)

корпорацией Майкрософт

В этом уроке вы узнаете, как использовать ASP.NET MVC и URL-адрес, с различными версиями информационных служб Интернета. Вы узнаете различные стратегии использования ASP.NET MVC с IIS 7.0 (классический режим), IIS 6.0 и более ранними версиями IIS.

Платформа mVC ASP.NET зависит от ASP.NET маршрутизируя маршруты запросов браузера к действиям контроллера. Для того, чтобы воспользоваться ASP.NET routing, возможно, придется выполнить дополнительные шаги конфигурации на веб-сервере. Все зависит от версии Интернет-информационных служб (IIS) и режима обработки запросов для вашего приложения.

Вот краткое изложение различных версий IIS:

  • IIS 7.0 (интегрированный режим) - Нет специальной конфигурации, необходимой для использования ASP.NET маршрута.
  • IIS 7.0 (классический режим) - Вам необходимо выполнить специальную конфигурацию для использования ASP.NET реутриации.
  • IIS 6.0 или ниже - Вам нужно выполнить специальную конфигурацию для использования ASP.NET.

Последней версией IIS является версия 7.5 (на Win7). IIS 7 IIS входит в Windows Server 2008 и VISTA/SP1 и выше. Вы также можете установить IIS 7.0 на любой версии операционной системы Vista, кроме Home Basic (см.). https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx

IIS 7.0 поддерживает два режима обработки запросов. Вы можете использовать интегрированный режим или классический режим. Вам не нужно выполнять какие-либо специальные шаги конфигурации при использовании IIS 7.0 в интегрированном режиме. Тем не менее, при использовании IIS 7.0 в классическом режиме необходимо выполнять дополнительную конфигурацию.

Microsoft Windows Server 2003 включает в себя IIS 6.0. Вы не можете обновить IIS 6.0 до IIS 7.0 при использовании операционной системы Windows Server 2003. При использовании IIS 6.0 необходимо выполнять дополнительные шаги конфигурации.

Microsoft Windows XP Professional включает iIS 5.1. При использовании IIS 5.1 необходимо выполнять дополнительные шаги конфигурации.

Наконец, Microsoft Windows 2000 и Microsoft Windows 2000 Professional включает IIS 5.0. При использовании IIS 5.0 необходимо выполнять дополнительные шаги конфигурации.

Интегрированный против классического режима

IIS 7.0 может обрабатывать запросы с помощью двух различных режимов обработки запросов: интегрированного и классического. Интегрированный режим обеспечивает лучшую производительность и больше возможностей. Классический режим включен для обратной совместимости с более ранними версиями IIS.

Режим обработки запросов определяется пулом приложений. Можно определить, какой режим обработки используется определенным веб-приложением, определив пул приложений, связанный с приложением. Выполните следующие действия.

  1. Запуск менеджера информационных услуг Интернета
  2. В окне подключения выберите приложение
  3. В окне «Действия» щелкните ссылку «Основные настройки», чтобы открыть диалоговую будку «Edit Application» (см. рисунок 1)
  4. Примите к сведению выбранный пул приложений.

По умолчанию IIS настроен для поддержки двух пулов приложений: DefaultAppPool и Classic .NET AppPool. Если выбран DefaultAppPool, приложение работает в режиме интегрированной обработки запросов. Если выбран Классический .NET AppPool, ваше приложение работает в классическом режиме обработки запросов.

Диалоговое окно New Project (Новый проект)

Рисунок 1: Обнаружение режима обработки запроса(Нажмите, чтобы просмотреть полноразмерное изображение)

Обратите внимание, что можно изменить режим обработки запросов в диалоговом окне Edit Application. Нажмите кнопку «Выберите» и измените пул приложений, связанный с приложением. Поймите, что при изменении ASP.NET приложения с классического на интегрированный режим возникают проблемы совместимости. Дополнительные сведения см. в следующих статьях:

Если ASP.NET приложение использует DefaultAppPool, то вам не нужно выполнять какие-либо дополнительные шаги, чтобы получить ASP.NET routing (и, следовательно, ASP.NET MVC) для работы. Однако, если приложение ASP.NET настроено на использование Classic .NET AppPool, то продолжайте читать, у вас есть больше работы.

Использование ASP.NET MVC со старыми версиями IIS

Если вам нужно использовать ASP.NET MVC со старой версией IIS, чем IIS 7.0, или вам нужно использовать IIS 7.0 в классическом режиме, то у вас есть два варианта. Во-первых, можно изменить таблицу маршрутов, чтобы использовать расширения файлов. Например, вместо того, чтобы запрашивать URL-адрес, например /Store/Подробности, вы будете запрашивать URL-адрес, например /Store.aspx/Details.

Второй вариант заключается в создании так называемой карты сценария подстановочных знаков. Карта скриптов подстановочных знаков позволяет сопоставить каждый запрос в ASP.NET фреймворке.

Если у вас нет доступа к веб-серверу (например, ваше приложение ASP.NET MVC размещается поставщиком услуг Интернета), то вам нужно будет использовать первый вариант. Если вы не хотите изменять внешний вид URL-адресов и у вас есть доступ к веб-серверу, то вы можете использовать второй вариант.

Мы подробно изучаем каждый вариант в следующих разделах.

Добавление расширений в таблицу маршрутов

Самый простой способ заставить ASP.NET маршрутизатор для работы со старыми версиями IIS — изменить таблицу маршрутов в файле Global.asax. Файл По умолчанию и неизмененный Global.asax в листинге 1 настраивает один маршрут под названием маршрут по умолчанию.

Список 1 - Global.asax (неизменен)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Маршрут по умолчанию, настроенный в листинге 1, позволяет направлять URL-адреса, которые выглядят следующим образом:

/Дом/Индекс

/Продукт/Подробности/3

/Product

К сожалению, старые версии IIS не передают эти запросы в ASP.NET рамки. Таким образом, эти запросы не будут направляться на контроллер. Например, если вы сделаете запрос браузера на URL /Home/Index, то вы получите страницу ошибки на рисунке 2.

Диалоговое окно New Project (Новый проект)

Рисунок 2: Получение 404 Не найденная ошибка(Нажмите, чтобы посмотреть полноразмерное изображение)

Более старые версии IIS отображают только определенные запросы в ASP.NET рамки. Запрос должен быть для URL с правом расширения файла. Например, запрос на /SomePage.aspx отображается в ASP.NET фреймворке. Тем не менее, запрос на /SomePage.htm не делает.

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

Это делается с registermvc.wsfпомощью сценария с именем . Он был включен в ASP.NET MVC 1 релиз в C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts, но по состоянию на http://aspnet.codeplex.com/releases/view/39978ASP.NET 2 этот сценарий был перенесен на ASP.NET Futures, доступные на .

Выполнение этого скрипта регистрирует новое расширение .mvc с IIS. После регистрации расширения .mvc можно изменить маршруты в файле Global.asax, чтобы маршруты использовали расширение .mvc.

Модифицированный файл Global.asax в листинге 2 работает со старыми версиями IIS.

Листинг 2 - Global.asax (изменен с расширениями)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.mvc/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Важно: не забудьте построить ASP.NET MVC-приложение после изменения файла Global.asax.

В списке 2 есть два важных изменения в файле Global.asax. В настоящее время в Global.asax определены два маршрута. Шаблон URL для маршрута по умолчанию, первый маршрут, теперь выглядит следующим образом:

(контролер).mvc/(действия) /id)

Добавление расширения .mvc изменяет тип файлов, которые перехватывает модуль ASP.NET. С этим изменением приложение mVC ASP.NET теперь направляет запросы следующим образом:

/Home.mvc/Index/

/Product.mvc/Подробности/3

/Product.mvc/

Второй маршрут, Корневой маршрут, является новым. Этот шаблон URL для маршрута Root является пустой строкой. Этот маршрут необходим для сопоставления запросов, сделанных с корнем приложения. Например, маршрут Root будет соответствовать запросу, который выглядит следующим образом:

http://www.YourApplication.com/

После внесения этих изменений в таблицу маршрутов необходимо убедиться, что все ссылки в приложении совместимы с этими новыми шаблонами URL. Другими словами, убедитесь, что все ваши ссылки включают расширение .mvc. Если вы используете метод помощника Html.ActionLink() для генерации ссылок, то вам не нужно вносить какие-либо изменения.

Вместо использования скрипта registermvc.wcf можно добавить новое расширение к IIS, которое отображается в ASP.NET рамки вручную. При добавлении нового расширения убедитесь, что флажок с пометкой Verify, что файл существует, не проверен.

Хостинг-сервер

У вас не всегда есть доступ к веб-серверу. Например, если вы размещаете свое приложение mVC ASP.NET с помощью интернет-хостинга, то вы не обязательно будете иметь доступ к IIS.

В этом случае следует использовать одно из существующих расширений файлов, отображено в ASP.NET фреймворка. Примеры расширений файлов, отображемых для ASP.NET включают расширения .aspx, .axd и .ashx.

Например, в измененном файле Global.asax в листинге 3 используется расширение .aspx вместо расширения .mvc.

Листинг 3 - Global.asax (изменен с расширениями .aspx)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.aspx/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Файл Global.asax в листинге 3 точно такой же, как и предыдущий файл Global.asax, за исключением того факта, что он использует расширение .aspx вместо расширения .mvc. Вам не нужно выполнять какие-либо настройки на удаленном веб-сервере, чтобы использовать расширение .aspx.

Создание карты сценария Уайлдкарты

Если вы не хотите изменять URL-адреса для ASP.NET приложения MVC, и у вас есть доступ к вашему веб-серверу, то у вас есть дополнительная опция. Можно создать карту сценария подстановочных знаков, которая отображает все запросы на веб-сервер в ASP.NET рамки. Таким образом, вы можете использовать таблицу маршрутов по умолчанию ASP.NET MVC с IIS 7.0 (в классическом режиме) или IIS 6.0.

Имейте в виду, что эта опция заставляет IIS перехватывать каждый запрос, сделанный против веб-сервера. Это включает в себя запросы на изображения, классические страницы ASP и HTML-страницы. Таким образом, включение карты сценария подстановочных знаков для ASP.NET имеет последствия для производительности.

Вот как вы включите карту сценария подстановочных знаков для IIS 7.0:

  1. Выберите приложение в окне подключения
  2. Убедитесь, что представление функций выбрано
  3. Дважды щелкните кнопку Обработчик карт
  4. Нажмите на ссылку Добавить Уайлдкард Скрипт Карта (см. Рисунок 3)
  5. Введите путь к_файлу aspnet isapi.dll (Вы можете скопировать этот путь с карты скриптов PageHandlerFactory)
  6. Введите имя MVC
  7. Нажмите кнопку OK

Диалоговое окно New Project (Новый проект)

Рисунок 3: Создание карты сценария подстановочного знака с IIS 7.0(Нажмите, чтобы просмотреть полноразмерное изображение)

Выполните следующие действия, чтобы создать карту сценария подстановочных знаков с IIS 6.0:

  1. Нажмите правой кнопкой мыши на веб-сайте и выберите Свойства
  2. Выберите вкладку «Домашний каталог»
  3. Нажмите кнопку Конфигурация
  4. Выберите вкладку Картирование
  5. Нажмите кнопку Вставить (см. рисунок 4)
  6. Вставьте путь к aspnet_isapi.dll в исполняемое поле (вы можете скопировать этот путь с карты скрипта для файлов .aspx)
  7. Отменить флажок с пометкой Verify, что файл существует
  8. Нажмите кнопку OK

Диалоговое окно New Project (Новый проект)

Рисунок 4: Создание карты сценария подстановочного знака с IIS 6.0(Нажмите, чтобы просмотреть полноразмерное изображение)

После включения карт скриптов подстановочных знаков необходимо изменить таблицу маршрутов в файле Global.asax таким образом, чтобы она включала корневой маршрут. В противном случае вы получите страницу ошибки на рисунке 5 при запросе на корневую страницу приложения. Модифицированный файл Global.asax можно использовать в листинге 4.

Диалоговое окно New Project (Новый проект)

Рисунок 5: Отсутствует ошибка корневого маршрута(Нажмите, чтобы просмотреть полноразмерное изображение)

Список 4 - Global.asax (изменен с корневым маршрутом)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

После включения карты сценария подстановочных знаков для IIS 7.0 или IIS 6.0 можно сделать запросы, которые работают с таблицей маршрутов по умолчанию, которые выглядят следующим образом:

/

/Дом/Индекс

/Продукт/Подробности/3

/Product

Сводка

Цель этого учебника состояла в том, чтобы объяснить, как вы можете использовать ASP.NET MVC при использовании старой версии IIS (или IIS 7.0 в классическом режиме). Мы обсудили два способа получения ASP.NET маршрутизм для работы со старыми версиями IIS: изменить таблицу маршрутов по умолчанию или создать карту сценария подстановочных знаков.

Первый вариант требует изменения URL-адресов, используемых в ASP.NET mVC-приложении. Одним из очень существенных преимуществ этого первого варианта является то, что вам не нужен доступ к веб-серверу для того, чтобы изменить таблицу маршрутов. Это означает, что вы можете использовать этот первый вариант, даже при хостинге ASP.NET приложения MVC с интернет-хостинга компании.

Второй вариант заключается в создании карты сценария подстановочных знаков. Преимущество этого второго варианта заключается в том, что вам не нужно изменять URL-адреса. Недостатком этого второго варианта является то, что он может повлиять на производительность вашего приложения mVC ASP.NET.