Создать асинхронный отчет в ASP.Net MVC - PullRequest
2 голосов
/ 14 марта 2012

У меня есть веб-приложение ASP.Net MVC, где пользователи должны иметь возможность создавать отчеты Excel.Создание некоторых отчетов займет около 15 минут.Поэтому я хочу создать эти файлы Excel асинхронно и отправить их по электронной почте, когда они будут готовы.

После того, как пользователь отправил форму с запросом на создание файла Excel, пользователь должен получить ответ, который говорит: «Письмо с прикрепленным файлом Excel будет отправлено вам примерно через 15 минут. "

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Это довольно широкий вопрос, но для хорошей работы с потоками в .NET 4 вы можете использовать Task .

Вы можете создать простое действие в контроллере:

[HttpPost]
public ActionResult ExcelReport(ReportModel model)
{
    if(ModelState.IsValid)
    {
        ReportService reportCreator = new ReportService(); // or whatever class you use for that
        Task.Factory.StartNew( () => reportCreator.GenerateReport(model)); 
        //redirect somewhere or return a plain view with your message
        return View("ConfirmationMessage");
    }
    return View();
}

Конечно, вы должны отправить его по почте в конце генерации в GenerateReport или пойти еще глубже и запустить другую задачу из метода GenerateReport.

Это делается на всей стороне сервера, если вы хотите иметьвсплывающее окно, вам нужно будет использовать, например, jQuery для перехвата отправки формы, передать модель функции по вашему выбору, где вы запускаете задачу и использовать для сообщения всплывающее окно из jQueryUI.Но это вопрос предпочтений.:)

1 голос
/ 14 марта 2012

Проблема фоновой работы в ASP.NET заключается в том, что ASP.NET может уничтожить домен приложений и создать новый в любой момент (переработка).Если у вас есть работа, работающая с потоками, о которых среда выполнения не знает, они тоже будут уничтожены.

Обычным решением является наличие отдельного процесса службы Windows, который отвечает за выполнение фоновой работы.Поскольку это другой процесс, он не контролируется ASP.NET.

Итак, ваше веб-приложение отправляет запрос на выполнение какой-либо работы в Службу до завершения веб-ответа.Это общение обычно использует WCF, размещенный в Сервисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...