2015-02-10 5 views
1

У меня есть следующий сценарий:Asp.net C# Асинхронный вызов метода веб-службы

1) Пользователь загружает файл через веб-страницы ASP.NET.
2) Веб-страница передает файл FileFlowManagerBLL, который проверяет файл и загружает его в базу данных.
3) Я бы хотел вызвать метод фоновой веб-службы, который, кстати, в том же проекте, так что веб-страница служба запускает огромную работу с хрустом числа из загруженного файла. После вызова метода веб-службы я хотел бы вернуть элемент управления обратно пользователю, не дожидаясь его завершения, показывая сообщение о том, что файл был успешно обновлен, и пользователь получит электронное письмо после завершения хэширования данных.
4) Веб-сервис завершает число хрустов, давая сказать 30-60 минут или может быть больше, и вызывает соответствующий код, который отправляет электронное письмо пользователю.

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

+0

Это довольно популярный вопрос, но я изо всех сил пытаюсь найти недавний дубликат. То, что связано с этой областью, устарело. –

+0

Да, я тоже пытался найти его, но не смог найти последнюю версию! – learner

+1

Вот полезная статья - http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html –

ответ

1

Один из способов - разместить вашу службу WCF в качестве службы Windows. Ваш первоначальный веб-сервис (после проверки файла) может записать его в определенный каталог. Затем в вашей службе Windows вы можете создать FileSystemWatcher, который ищет новые файлы в этом каталоге, и если он найдет, что любой может вызвать ваш метод обработки.

+0

C# Веб-сервис ASMX уже существует, поэтому было бы проще вызвать его метод асинхронно (каким-то образом). Я уверен, что должен быть способ. – learner

+1

Существует множество примеров того, как асинхронно вызывать метод с вашей клиентской страницы .net, а затем ждать результата. Однако ваш пример несколько отличается. Вы не хотите ждать завершения вашего долгого процесса, чтобы отправить ответ на веб-страницу. Вы хотите проверить файл, запустить длительный процесс, а затем вернуться к клиенту до того, как завершится длительный процесс. Я бы очень рекомендовал, чтобы у вас была отдельная автономная служба WCF Windows Service, которая запускает длительный процесс, и просто попросите ваш веб-сервис воспользоваться этим сервисом. Что-то вроде этого должно быть распространено. –

Смежные вопросы