Асинхронный веб-запрос в asp.net httphandler - PullRequest
0 голосов
/ 02 февраля 2011

У меня следующий сценарий, и я хотел бы получить некоторые разъяснения, если это возможно.

У меня есть функция javascript, которая делает ajax-вызов файла обработчика (.ashx). Функция javascript не нуждается в возвращаемом значении. Обработчик опубликует некоторые данные и будет готов. Файл обработчика делает веб-запрос ASYNC к Bitly, Facebook и Twitter (не в этом порядке). Моя идея состоит в том, что обработчик должен сделать ASYNC-вызов Bitly (bit.ly), получить результат, а затем публиковать его в Twitter и Facebook одновременно в разных потоках, поскольку они не зависят друг от друга.

То, о чем я спрашиваю, это WaitHandle. Должен ли я использовать это, так как обработчик работает вне пользовательских действий, или методов обратного вызова будет достаточно? Будет ли файл обработчика прослушивать обратный вызов, если нет вызова для удержания текущего потока до его возврата? Если мне нужно, чтобы поток ожидал обратного вызова, я все еще получаю выгоду от создания веб-запроса ASYNC, который видит, что исходный поток все еще ожидает или зависает?

Я вроде понимаю, как это должно работать, но не могу все это собрать вместе.

ПРИМЕЧАНИЕ. Дескриптор не используется для перехвата веб-запроса. Я использую обработчик для обработки сообщения AJAX. Я звоню обработчику напрямую.

1 Ответ

0 голосов
/ 02 февраля 2011

Я бы не использовал Async Handler для этого. Поскольку вы не возвращаете результат, использование Async Handler для этой цели расточительно. Вы используете обработчик Aysnc в ситуациях, когда задача, которую вы выполняете, выполняется относительно долго, и результат этой задачи должен быть отправлен обратно в качестве ответа ожидающему потоку и в конечном итоге браузеру.

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

Чтобы ответить на ваш вопрос о WaitHandle (если вы чертовски склонны идти по этому маршруту), нет, вы не должны использовать ручку ожидания, вы должны использовать ее как настоящий асинхронный неблокирующий обработчик. WaitHandle заблокирует.

Нет никакой гарантии, что обработчик будет жив в течение всего процесса. Ваш рабочий процесс может быть сброшен в течение этого времени. Тем более, что это не асинхронный обработчик, а асинхронная работа «вне полосы». Под внешним я имею в виду не тот же процесс, что и в вашем приложении ASP.NET.

...