2010-04-13 7 views
3

Я сделал пользовательский обработчик, который происходит от MvcHandler. У меня есть маршруты с помощью настраиваемого RouteHandler, который возвращает мой новый обработчик для GetHttpHandler(), и я переопределяю ProcessRequest() в моем пользовательском обработчике. Вызов GetHttpHandler вызывает точку останова, и конструктор моего обработчика определенно вызывается, но BeginProcessRequest() вызывается на базе MvcHandler вместо ProcessRequest().Почему IHttpAsyncHandler вызывается через IHttpHandler?

Почему методы асинхронного вызова вызываются, когда я ничего не сделал, чтобы называть их? Я не хочу асинхронной обработки, и я, конечно, ничего не сделал, чтобы получить ее. Мои контроллеры производятся от Controller, а не AsyncController.

У меня нет исходного кода для меня прямо сейчас, но я могу добавить его позже, если потребуется. Я надеялся, что кто-то может знать некоторые причины, по которым BeginProcessRequest может быть вызван, когда он не нужен.

+0

Я попробовал приложение MVC 2 из исходного кода с источником System.Web.Mvc и с нулевыми изменениями BeginProcessRequest всегда вызывается, а ProcessRequest - нет. Является ли обработка по умолчанию в MVC 2 асинхронной? Я работал в предположении, что обработка по умолчанию была синхронной, но, похоже, я ошибаюсь. –

ответ

2

Брэд Уилсон ответил на мой пост на форумах Asp.net со следующим ответом: http://forums.asp.net/t/1547898.aspx

Короткий ответ: да.

С добавлением AsyncController, класс MvcHandler должен быть IHttpAsyncHandler сейчас, что означает , что, насколько ядро ​​ASP.NET выполнения касается точки входа являются в настоящее время BeginProcessRequest и EndProcessRequest, не ProcessRequest.

Похоже, что ProcessRequest больше не называется, но я мог ошибаться. Могу сказать, что я не видел этого в своем тестировании.