(Среда .NET 4.0 C # WCF и ASP.NET)
Итак, я хотел бы, чтобы это был поток:
- Страница посещений пользователя.
- Пользователь загружает файл через элемент управления.
- Пользователь нажимает «Подтвердить».
- Страница сообщает службе WCF начать «обработку» этого файла (где происходит много скрытых операций, таких как распаковка, хеширование, перемещение и работа с базой данных)
- Когда файл обрабатывается, пользователь видит отзывы о состоянии обработки через AJAX, панель обновлений и таймер, проверяющий состояние каждые N секунд.
Я добавил в базу данных таблицу «UploadProcessing», в которой сохраняется статус (среди прочего) загрузки, и я написал логику для обработки загрузки на серверной части, которая вызывается службой WCF. Когда загрузка обрабатывается, она загружает запись «UploadProcessing» с текущим статусом работы до ее окончательного завершения.
Сначала я просто вызвал WCFClient.ProcessUpload(args...);
из события Commit_Click()
, но он просто обработал загрузку и дождался ее завершения, прежде чем включить таймер состояния обновления AJAX, который всегда показывал, что он уже завершен (поскольку имел). Затем я попытался вызвать тот же метод асинхронно, но, похоже, он функционировал таким же образом, потому что страница не полностью отправила обратно клиенту (с включенным таймером), пока обработчик асинхронного завершения не получил свой ответ, что фактически привело к тому же ' завершено "ответ пользователю.
Так что я вежливо и уважительно спрашиваю сообщество, как бы вы «запустили и забыли» этот метод ProcessUpload()
через WCF, чтобы он мог выполнять свои функции в фоновом режиме, пока страница свободна для асинхронной обратной передачи и отслеживания ее статус? Возможно, какое-то решение ThreadPool на стороне WCF? Или, возможно, ведомый сервис, который отслеживает таблицу «UploadProcessing» для ожидающих загрузок, а затем обрабатывает их таким образом?
Заранее спасибо за любой совет!