Каков предпочтительный метод управления синхронизированным событием с помощью веб-приложения? - PullRequest
0 голосов
/ 28 сентября 2010

Я разрабатываю веб-приложение ASP.NET 4.0, в котором администраторы могут создавать аукционы с истечением срока действия. Время истечения будет храниться в базе данных. Как я могу гарантировать, что аукцион заканчивается в заранее определенное время, учитывая тот факт, что экземпляр приложения может не работать, когда наступит время? Приложение будет размещено на IIS7. Я рассматриваю службу Windows, но мне интересно, какие еще варианты есть.

Ответы [ 3 ]

4 голосов
/ 28 сентября 2010

Здесь вы можете выбрать один из двух сценариев:

  • Ленивый с веб-приложением
  • Активно с услугой

Ленивый сценарий

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

Активный сценарий

Создайте службу, которая выбирает первый аукцион с истекающим сроком действия из БД.Сохраните этот DateTime и дайте сервису спать до окончания аукциона.Поднимите обслуживание в тот DateTime и обработайте истекающий аукцион.Затем дайте сервису поиск следующего аукциона (ов), срок которого истекает, и дайте сервису снова заснуть.И так далее ... Я думаю, Windows Workflow Foundation содержит все инструменты и требования для этой практики.

Что-то между

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

2 голосов
/ 28 сентября 2010

Лучше всего будет использовать службу Windows, которая обрабатывает синхронизированные события.Использование System.Threading.Timer в ASP.NET - это плохо;Это МОЖЕТ работать в вашем случае, потому что вносимые изменения не влияют непосредственно на пользовательский интерфейс, но я бы не стал ставить, что они работают безупречно.Если вам нужно планировать события в фоновом режиме веб-приложения, используйте серверное приложение.

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

2 голосов
/ 28 сентября 2010

Если вы хотите, чтобы он был на 100% надежным, вам подойдет служба Windows, которая выполняет всю запланированную логику.Как вы говорите, вы не можете доверять веб-приложению, поскольку оно может даже не работать.

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