Справка C # .NET для новичков ... Лучшие практики - PullRequest
1 голос
/ 13 сентября 2009

Мне нужно какое-то руководство о том, как выполнить конкретное задание, которое мне нужно выполнить ...

У меня есть таблица базы данных, которая содержит запросы, сделанные пользователями для таблиц Excel.

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

Мне нужно написать какой-нибудь сервис, который сможет постоянно проверять столбец состояния этой таблицы.

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

(ПРИМЕЧАНИЕ. Я написал программу, которая содержит класс, который создает электронную таблицу Excel и сохраняет ее на локальном жестком диске. Все это будет размещаться на одном сервере)

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 13 сентября 2009

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

Я предпочитаю службы Windows, потому что они установлены, всегда запускаются при запуске и работают в согласованной среде. Запланированное задание зависит от того, к какой задаче не было обращений, а также от того, что исполняемый файл не был перемещен.

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

Здесь - достойный ресурс для начала работы.

0 голосов
/ 13 сентября 2009

В ответ на ваши дополнительные вопросы в комментариях:

«Как бы я назвал приложение, которое фактически создает электронную таблицу?»

Я бы включил «приложение», которое создает электронные таблицы в core.dll (если у вас нет веских причин, чем меньше библиотек, тем лучше, я думаю, - так как меньше вещей нужно отслеживать). *

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

Скорее всего, метод для вызова объекта System.Threading.Timer (), который может использовать служба. Метод, который создает электронную таблицу.

0 голосов
/ 13 сентября 2009

Применительно к вашим сообщениям:

Вы могли бы сделать пару вещей:

  1. Вы можете сделать то, что вы предложили, иметь программу (служба Windows звучит соответствующим образом), которая периодически запрашивает вашу таблицу (звучит как select * from tableName где field = что-то), а затем либо: просто вызывает необходимый методы из вашего приложения, упоминаемые как dll в этой программе.

  2. Включите проверку таблицы в программе / exe, которую вы уже написали, и просто запланируйте ее с помощью интерфейса запланированных задач Windows.

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

0 голосов
/ 13 сентября 2009

На вашем месте я бы применил двойной подход.

Я бы поместил всю свою бизнес-логику в библиотеку C # (скажем, widget.core.dll).

Тогда, в вашем сервисном приложении, только минимально необходимый запуск и остановка сервиса (т.е. не намного больше, чем стандартный шаблон, который генерирует VS), и вызов непосредственно в ваш core.dll.

Также напишите консольное приложение, которое при необходимости принимает некоторые входные параметры, и этот вызов вызывает те же методы в вашем core.dll, что и ваша служба. Опять же, это консольное приложение должно иметь только едва достаточный код для обработки аргументов и соответствующего вызова основной библиотеки. Это консольное приложение затем можно вызвать вручную или как запланированное задание.

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

С очень небольшими дополнительными затратами вы даете пользователю возможность использовать приложение в качестве службы или запланированной задачи (в зависимости от их предпочтений, среды и т. Д.).

service.exe --
             |
             --> core.dll
             |
console.exe--
0 голосов
/ 13 сентября 2009

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

while (true)
     for request r in requests
           <check status column for r, take action as necessary>
     end for
     sleep (some interval)
end while
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...