2013-03-20 3 views
1

После многих лет программирования мне нужно сделать что-то асинхронно в первый раз (потому что это занимает несколько минут, а время веб-страницы - не нужно, чтобы пользователь так долго ждал этого). Это действие выполняется всего несколькими людьми, но может быть сделано несколько раз в день (для каждого из них).Асинхронная обработка .NET SQL Server?

Из «Сохранить» нажмите на веб-страницу ASP.NET с помощью LINQ, я вставляю запись в таблицу SQL Server. Затем он запускает пакет SSIS, чтобы вывести эту запись в несколько других баз данных по всей стране.

Так ..

  1. Как я могу (надеюсь просто) сделать это асинхронно, так что пользователь может получить с другими вещами?

  2. Должно ли это быть настроено на стороне .NET или на стороне SQL?

  3. Есть ли способ (минуты спустя), чтобы пользователь мог знать, что процесс завершен и успешно выполнен? Может быть, письмо? Не знаете, как еще пользователь может это знать.

Я читал некоторые темы на этом сайте об этом, но они были с 2009 года, так не уверен, если сильно отличается теперь с Visual Studio 2012/.NET Framework 4.5 (мы по-прежнему с помощью SQL Server 2008 R2).

+0

Прочтите использование AJAX и, возможно, веб-методов - звуки, идеально подходящие для вашей ситуации ... – sgeddes

+0

Не обязательно. Если пользователь переместится, не останется никакого механизма, чтобы увидеть результат или проверить наличие ошибок. –

ответ

1

Как правило, это плохая идея выполнять длительные задачи в ASP.Net. Во-первых, если пул приложений перерабатывается до завершения задачи, он будет потерян.

Я бы предложил написать запрос в таблицу базы данных и использовать отдельную службу Windows для выполнения долговременной работы. Он может обновить столбец статуса в таблице базы данных, который может быть проверен позже, чтобы узнать, завершена ли задача или нет, и была ли ошибка.

0

Вы можете использовать Service Broker со стороны SQL; это реализация SQL Server очереди сообщений. Хорошие примеры here и here

Что вы делаете, это создать Брокерские услуги обслуживания и определить некоторые строительные леса (очередей, типы сообщений и т.д.). Затем вы создаете процедуру «Активация» службы, которая в основном является хранимой процедурой, которая потребляет сообщения из очереди. Этот SP получит, например, сообщение с идентификатором записи в таблице, а затем продолжит и сделает все, что ему нужно сделать, возможно, отправив электронное письмо, когда это будет сделано, и т. Д.

Итак, из вашего code-behind, вы бы назвали простую хранимую процедуру, которая бы вставляла данные пользователя в таблицу и отправляла сообщение в очередь с, например, идентификатором новой записи, а затем сразу же возвращалась. Я полагаю, вы должны сказать пользователю заранее, что это может занять несколько минут, и они получат электронное письмо и т. Д.

Отличная вещь в Service Broker - доставка сообщений в значительной степени гарантирована - даже если ваш SQL Server падает сразу после того, как сообщение поставлено в очередь, когда вы приносите его обратно, активация SP снова начнется, поэтому он очень надежный.

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