Книга: ASP.NET MVC Framework
Асинхронное выполнение при работе с контроллерами
Разделы на этой странице:
При создании веб-приложений часто может возникнуть проблема с обработкой данных, которая отнимает большие ресурсы и машинное время. Механизм ASP.NET имеет ограниченное количество потоков, которые предназначены для обработки пользовательских запросов, полученных от сервера IIS. Проблема состоит в том, что если один из запросов предполагает продолжительную работу с привлечением больших ресурсов, то такой запрос может уменьшить пропускную способность сайта. В случаях, когда таких запросов много, их выполнение может вообще заблокировать доступ пользователей к ресурсу, т. к. все рабочие потоки ASP.NET будут заняты, простаивая в ожидании того, когда завершится выполнение тяжелого запроса к базе данных или сложное вычисление.
Выходом из такой ситуации может служить асинхронное выполнение запросов. При асинхронном выполнении тяжелая задача поручается для выполнения отдельному специально созданному потоку, а основной поток ASP.NET освобождается для обработки других пользовательских запросов. Для реализации такого функционала разработчиками MVC Framework был создан специальный механизм AsyncController
, который хоть и не вошел в MVC Framework, но доступен в особой библиотеке MVC Framework Futures, которая представлена файлом Microsoft.Web.Mvc.dll.
Примечание
Саму библиотеку и документацию к ней на английском языке можно скачать с официальной страницы ASP.NET MVC на сайте Codeplex по следующему адресу: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471
******************************
После добавления ссылки на сборку в проект, для того чтобы использовать асинхронные контроллеры, необходимо проделать некоторые изменения в существующем коде. Первым делом нужно изменить регистрации маршрутов в таблице маршрутизации так, как показано в следующем фрагменте:
routes.MapAsyncRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
Обратите внимание на то, что вызов routes.MapRoute
заменен на routes.MapAsyncRoute
, это необходимо, чтобы механизм MVC мог обрабатывать как асинхронные, так и синхронные контроллеры. После изменений в регистрации маршрутов нет нужды в других изменениях, чтобы специально отслеживать синхронные контроллеры, поскольку механизм MapAsyncRoute
регистрирует маршруты как для асинхронных, так и синхронных контроллеров.
После изменения регистрации маршрутов следует изменить обработчики для *.mvc, определенные ранее в web.config, следующим образом в разделах httpHandlers
и handlers
:
<add verb="*" path="*.mvc" validate="false"
type="System.Web.Mvc.MvcHttpHandler,
System.Web.Mvc, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="MvcHttpHandler" preCondition="integratedMode"
verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Эти определения обработчиков необходимо заменить на следующие:
<add verb="*" path="*.mvc" validate="false"
type="Microsoft.Web.Mvc.MvcHttpAsyncHandler, Microsoft.Web.Mvc"/>
<add name="MvcHttpHandler" preCondition="integratedMode"
verb="*" path="*.mvc" type="Microsoft.Web.Mvc.MvcHttpAsyncHandler,
Microsoft.Web.Mvc"/>
После всех изменений можно приступать к работе с асинхронными контроллерами. Для того чтобы класс контроллера стал асинхронным, необходимо наследовать его от класса AsyncController
:
public class SomeAsyncController : AsyncController
{
...
}
После этого конструктор по умолчанию, унаследованный от AsyncController
, определит новый вариант ActionInvoker
в виде экземпляра класса AsyncControllerActionInvoker
для того, чтобы выполнять асинхронные действия. Для реализации асинхронных действий механизм AsyncController
предлагает три паттерна, которые вы вольны использовать по отдельности либо смешивать их друг с другом: IAsyncResult, Event, Delegate
.
- Резервное копирование при работе InterBase в режиме 24x7
- 2.5. Разработка технического задания на проведение детального анализа рынка при работе над инновационным проектом. Основ...
- Приложение 21 Образец должностной инструкции начальника отдела по работе с сетевыми клиентами
- 500 типичных проблем и их решений при работе на ПК
- Домашняя мастерская: вы всегда на работе
- Получение помощи по работе с книгой и компакт-диском
- Инструкции по работе с программой teacher
- Вот уже в который раз при работе в сети появляется сообщение от других пользователей. Что это может быть?
- 4.13. Замечания по работе Firewall
- Замечания по работе с файлами
- 8.4.5. Выполнение внешних команд
- 9.5. Замечания по работе squid