Я могу использовать потоки для выполнения продолжительных заданий на IIS?

Вы можете использовать инструкцию ATTACH DATABASE в SQLite. Вот документация

Когда вы присоединяете базу данных, используйте что-то подобное INSERT INTO DestinationTable SELECT * FROM attachedDatabase.SourceTable

fun migration(context: Context) {
    val destinationDb = DatabaseHelper2(context)
    val sourceDbPath = context.getDatabasePath("database1.sqlite")

    val writableDb = destinationDb.writableDatabase
    writableDb.execSQL("ATTACH DATABASE '${sourceDbPath.absolutePath}' AS attached")
    writableDb.execSQL("INSERT INTO DestinationTable SELECT * FROM attached.SourceTable")
}

81
задан John Saunders 10 March 2015 в 15:10
поделиться

4 ответа

Можно выполнить то, что Вы хотите, но это обычно - плохая идея. Несколько блогов ASP.NET и механизмов CMS проявляют этот подход, потому что они хотят быть устанавливаемыми в общей системе хостинга и не взять зависимость от сервиса окон, который должен быть установлен. Обычно они начинают длительный поток в Global.asax, когда приложение запускается, и имейте стоявшие в очереди задачи процесса того потока.

В дополнение к сокращению ресурсов, доступных IIS/ASP.NET для обработки запросов, у Вас также есть проблемы с потоком, уничтожаемым, когда AppDomain переработан, и затем необходимо иметь дело с персистентностью задачи, в то время как это в полете, а также запуск работы назад, когда AppDomain возвращается.

Имеют в виду, что во многих случаях AppDomain переработан автоматически в интервале по умолчанию, а также если Вы обновляете web.config, и т.д.

, Если можно обработать персистентность и транзакционные аспекты потока, уничтожаемого когда-либо, затем можно обойти переработку AppDomain при наличии некоторого внешнего процесса, который выполняет запрос на сайте в некотором интервале - так, чтобы, если сайт переработан, у Вас, как гарантировали, будет он, отшатываются снова автоматически в течение X минут.

Снова, это обычно - плохая идея.

РЕДАКТИРОВАНИЕ: Вот некоторые примеры этой техники в действии:

Общественный Сервер: Используя Windows Services по сравнению с Фоновым потоком для Выполнения Кода в Запланированных Интервалах Создание Фонового потока, Когда Веб-сайт Сначала Запускается

РЕДАКТИРОВАНИЕ (от далекого далекого будущего) - В эти дни, я использовал бы Hangfire.

63
ответ дан Sachin Chavan 24 November 2019 в 09:40
поделиться

Вы не хотели бы использовать поток от пула потоков IIS для этой задачи, потому что это оставит тот поток не могущим обработать будущие запросы. Вы могли изучить Асинхронные Страницы в ASP.NET 2.0 , но это действительно не будет правильным ответом, также. Вместо этого что это кажется, что Вы извлекли бы выгоду из, изучает Microsoft Message Queuing . По существу Вы добавили бы, что задача назначает в очередь, и другой фоновый процесс (возможно служба Windows) ответил бы за выполнение той задачи. Но нижняя строка - то, что фоновый процесс полностью изолируется от IIS.

7
ответ дан senfo 24 November 2019 в 09:40
поделиться

Можно ли создать сервис окон, чтобы сделать ту задачу? Затем используйте дистанционную работу.NET от веб-сервера для вызова службы Windows, чтобы сделать действие? Если это так, именно это я сделал бы.

Это избавило бы от необходимости к реле на IIS и ограничило бы часть его вычислительной мощности.

, Если не затем я вынудил бы пользователя сидеть там, в то время как процесс сделан. Тем путем Вы удостоверяетесь, что это завершается и не уничтожается IIS.

2
ответ дан David Basarab 24 November 2019 в 09:40
поделиться

Просто создайте процесс-заменитель для выполнения асинхронных задач; это не должен быть сервис окон (хотя это - более оптимальный подход в большинстве случаев. MSMQ является путем, законченным уничтожение.

1
ответ дан Matt Davison 24 November 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: