ASP.NET - Как периодически отслеживать таблицы базы данных?

2

Я разрабатываю веб-сайт с использованием VS 2008 (С#). Моя текущая миссия - разработать модуль, который должен выполнять следующие задачи:

  • Каждые 15 минут процесс должен связываться с базой данных, чтобы узнать, добавлен ли новый пользователь в таблицу "Пользователь" в базе данных посредством регистрации
  • Если он найдет новую запись, она должна добавить эту запись в xml файл (скажем NewUsers18Jan2009.xml).

Чтобы достичь этого, какой из следующих наиболее подходит?

  • Темы
  • Служба Windows
  • Другое

Есть ли образцы для демонстрации этого?

  • 2
    Можете ли вы придумать лучший заголовок для своего поста? Благодарю.
  • 0
    Почему вы использовали для этого тег asp.net ?
Показать ещё 1 комментарий
Теги:
background
scheduling

10 ответов

3
Лучший ответ

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

3

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

Я не вижу связи с веб-сайтом здесь...

2

Почему в мире администратору нужно будет пинговать каждые 15 минут? Бедный админ!

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

  • 0
    :) вот как наш архитектор спроектировал HLD
  • 0
    Ой! И я предполагаю, что вы находитесь в организации, которая заставляет вас жить по HLD, как только она будет одобрена. :-)
Показать ещё 1 комментарий
1

Самый простой способ - создать System.Threading.Timer в приложении на Application_Start и поместить его в какое-то статическое поле, чтобы оно не собиралось. Таким образом, вы можете заставить свой веб-приложение опросить базу данных без необходимости внешнего процесса. Конечно, если ваше приложение отключается, значит, таймер. Для логики опроса просто держите последний userId (если у вас есть политика инкремента) и проверьте наличие новых добавленных пользователей путем фильтрации WHERE id > lastId.

1

Служба Windows предоставит вам хорошее решение - или если вы используете SQL Server, вы можете запустить такую ​​обработку из задания агента SQL.

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

1

Я думаю, что ваш подход неправильный. Вы должны сделать одну из двух вещей:

  • Добавьте пользователя в файл XML в качестве последнего шага при создании пользователя.
  • Генерировать XML файл по требованию, когда он запрашивается. Это даст вам информацию в режиме реального времени с очень небольшими накладными расходами.
0

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

0

Создайте новую таблицу (или текстовый файл), которая хранит последний раз, когда вы делали "новый пользовательский экспорт" или дополнительно просто искали дату изменения/создания последнего файла экспорта. Когда ваш script попадает в вашу БД, выполняйте команду SQL, чтобы все пользователи создали после последнего времени экспорта. Выложите новый XML для каждого пользователя.

Задайте этот script для запуска как запланированное задание/задание cron/возможно даже триггер базы данных.

0

Второй ответ Чака - вы можете извлечь эти данные из базы данных с помощью XML-запроса и отправить его напрямую, не нужно много создавать файлы в системе.

0

Поскольку вы, кажется, добавляете всех пользователей за данный день в один XML файл (согласно вашему сообщению), зачем вам это нужно каждые 15 минут? Разве не было бы достаточно сделать это один раз после полуночи?

Когда вы это делаете, желательно в службе Windows (если она должна запускаться каждые 15 минут) или в приложении командной строки, которое планируется запустить один раз, например, 0:15 часов, вам просто нужно будет проверить дату регистрации для пользователей, и если есть какой-либо зарегистрированный в прошлый день, вы добавите их в свой список и экспортируете этот список в файл XML в конце обработка таблицы.

Марк

  • 0
    Это веб-сайт для отслеживания посетителей, который должен сообщать администратору в течение 15 минут, есть ли новая запись или нет.
  • 0
    Хорошо, тогда я бы поддержал всех, кто предложил использовать службу Windows NT для этого - просканировать таблицу пользователей на наличие изменений с момента последнего сканирования (отследить эту дату последнего сканирования) и заполнить изменения в файле XML.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню