Длительный процесс синхронизации ASP.NET с требованиями

Я работаю с платформой электронной коммерции, и у меня есть задача синхронизироваться с некоторым программным обеспечением для удаленного учета. Задача требует синхронизации заказов, продуктов, запасов и т. д. При синхронизации больших объемов данных процесс может занять некоторое время. Итак, я не думаю, что приложение asp.net будет лучшим местом для решения этой проблемы. Итак, требования:

  1. Чтобы иметь возможность запланировать этот процесс на ночь
  2. Чтобы иметь возможность вручную запустить этот процесс и передать ему некоторые переменные, такие как номера заказов для экспорта.
  3. Возможно получение информации о статусе при запуске вручную.
  4. Должен работать на .net 3.5

Проблемы: невозможно использовать службу Windows, поскольку сайт удаленно размещен в общей службе, а узел не разрешает службу.

Идеи: мне очень трудно найти лучший способ справиться с этим за пределами asp.net, который соответствует всем требованиям, но у меня есть доступ к их FTP, и я подумал, что, возможно, консольное приложение, на котором размещен веб-сервис, может работать, и Я могу поместить планировщик Quartz в глобальный файл, чтобы отключить службу с сайта.

В любом случае, пожалуйста, предложите некоторые мысли и опыт, если они у вас есть, о том, какие методы сработали для вас.


person user204588    schedule 24.09.2014    source источник


Ответы (1)


Невозможно использовать службу Windows, поскольку сайт размещен удаленно в общей службе, а узел не разрешает службу.

Это может быть проблемой. Предоставляет ли этот хостинг какие-либо другие функции планирования? Если нет, то вам, возможно, придется подумать о смене хостинга.

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

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

  • Модуль, который выполняет логику, не привязанный к какому-либо пользовательскому интерфейсу или какому-либо способу его вызова. В основном проект библиотеки классов (или его часть).
  • Служба Windows или консольное приложение, которое ссылается на библиотеку классов и вызывает логику.
  • Веб-приложение, которое ссылается на библиотеку классов и вызывает логику.

После того, как вы разобрались, как запланировать консольное приложение, просто запланируйте его, и все готово. Если процесс возвращает некоторую информацию, консольное приложение также может выполнять любые уведомления, необходимые для информирования людей об этой информации.

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

Есть плюсы и минусы в любом случае, это действительно зависит от вас, как вы хотите действовать. В конечном итоге вы смотрите на две основные вещи здесь:

  1. Отделите саму логику от планирования/вызова логики.
  2. Используйте систему планирования для планирования задач. (Если у вашего хостинг-провайдера его нет, найдите того, у кого он есть.)
person David    schedule 24.09.2014