Перемещение процесса отнимания времени из моего приложения asp.net - PullRequest
2 голосов
/ 29 апреля 2011

Мое приложение Asp.net генерирует динамический PDF. Иногда это занимает некоторое время и является довольно тяжелым процессом. На самом деле я не хочу, чтобы мои пользователи ждали pdf, просто отправьте его на почту после того, как он сгенерирован.

Итак, я попробовал веб-сервис. Я передаю идентификатор (чтобы получить данные из базы данных) и некоторые строки в метод веб-службы.

Но и с веб-сервисом (даже с асинхронными вызовами) клиент получает ответ только после генерации pdf. Таким образом, пользователь все еще должен ждать.

Так что я немного застрял, должен быть способ, которым я пропускаю.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2011

Вам не нужен веб-сервис, чтобы получить возможность делать асинхронные вызовы.

Вы можете просто использовать ThreadPool.QueueUserWorkItem() в качестве подхода «забей и забудь»ASPX-страницу, затем верните ответ с каким-то «идентификатором рабочего элемента» - например, квитанцией или номером заказа.

Создайте PDF в WaitCallback, который вы передаете в QUWI.когда PDF готов, этот WaitCallback может отправить электронное письмо, или что-то еще.


Используйте веб-сервис, если вы хотите, чтобы функция была доступна вне веб-страницы.Не используйте его строго для асинхронности.

1 голос
/ 29 апреля 2011

Проблема заключается в том, что в коде страницы ASP.NET вы должны синхронно вызывать веб-службу, чтобы страница ожидала возврата веб-службы. Вы должны попытаться вызвать веб-сервис асинхронно (или в другом потоке), а затем не ждать его завершения. Как правило, прокси-сервер, сгенерированный Visual Studio, уже имеет асинхронные перегрузки, которые вы можете использовать.

Кроме того, вы можете изменить код своего веб-сервиса - по сути, когда приходит запрос к вашему веб-методу, вы можете начать генерацию PDF в другом потоке, чтобы ваш веб-метод мог закончить указывать вашему клиенту (в данном случае, странице) этот запрос был успешно запланирован для обработки.

0 голосов
/ 29 апреля 2011

Есть два пути, которые я знаю

Первые пути;В коде asp.net (в файле xxx.aspx.cs) вы можете определить метод void, затем вы можете вызвать метод, запустив поток, как показано ниже.1007 * Вы можете создать и отправить по почте страницу отправителя, например «SendMail.aspx», затем вы можете сделать ajax-запрос в javascript и не нужно ждать ответа.Вы можете передать значение id на страницу aspx в качестве параметра запроса.

...