Служба Windows и подключение к базе данных
(Я новичок в Windows Services) У меня есть автоматическая служба Windows, которая выбирает некоторые записи из таблицы базы данных, вызывает метод веб-службы для каждой записи и вставляет возвращаемое значение метода и некоторую другую информацию в таблицу. Мои проблемы перечислены ниже:
1- Когда я пытаюсь запустить сервис вручную, я получаю Error 1053 (the service did not respond to the start or control request in a timely fashion)
, Кстати несмотря на ошибку служба запускается и делает то, что должна делать.
2- (я знаю, что это распространенная проблема, но я предпочитаю спрашивать об этом снова) Служба автоматическая, но зависит от соединения с базой данных. Когда система, на которой работает служба, перезапускается, мне пришлось запускать ее вручную. Я добавляю Thread.Sleep()
строка кода, чтобы избежать этой проблемы. Каков подлинный способ решить проблему?
protected override void OnStart(string[] args)
{
checkRegistryForOracleNLS();
//Creating event log
plog = new System.Diagnostics.EventLog();
if (!System.Diagnostics.EventLog.SourceExists("Prov"))
{
System.Diagnostics.EventLog.CreateEventSource("Prov", "ProvLog");
}
plog.Source = "Prov";
plog.Log = "ProvLog";
plog.Clear();
Log("Service started at " + DateTime.Now.ToLongTimeString(), System.Diagnostics.EventLogEntryType.Information);
class_ora_tran.int_class_ora_tran();
DataTable dt;
Thread.Sleep(300000);
while (true)
{
Con2DB();
if (class_ora_tran.dbConnected())
{
RemoveOldRecords();
dt = FetchRec();
if (dt != null)
{
if (dt.Rows.Count > BLKSize)
Bulk(dt);
else
Single(dt);
}
}
}
}
3- Хотя я написал OnStop()
Метод, нет функции Stop, когда служба работает, и я хочу остановить ее. Следует также отметить, что мой сервис всегда находится в режиме запуска и никогда не меняется на "запущен".
Protected void OnStop(string[] args)
{
class_ora_tran.Disconnect();
Log("Service stoped at " + DateTime.Now.ToLongTimeString(), System.Diagnostics.EventLogEntryType.Information);
plog.Close();
}
4- Время от времени, хотя статус запускается, моя служба перестает делать то, что должна, и не получает записи из таблицы. Это случилось два раза раньше, к сожалению, я забыл проверить Event Viewer, чтобы увидеть, если какие-то ошибки произошли. кто-нибудь знает в чем причина? Это связано с проблемами, о которых я говорил выше?
5- Каждый раз, когда я хочу удалить службу, мне приходилось запускать команду удаления два раза! Любая помощь?
Редактировать: записи вставляются в таблицу постоянно, и процесс вызова веб-службы и т. Д. Должен выполняться всякий раз, когда в таблицу вводится новая запись. Я думал, что цикл "Пока" (правда) нужен. Любое предложение заменить эту часть?
1 ответ
Я выдвину некоторые предложения для вашего обслуживания.
- Сделайте так, чтобы ваш сервис начинался вручную. Поэтому после установки службы вы просто запускаете ее вручную только один раз.
После запуска у вас есть несколько хороших вариантов для запуска вашей логики.
, Запускайте каждые X минут http://www.codeproject.com/Questions/540617/windowsplusserviceplustoplusrunpluseveryplusoneplu
, Запускать в чч: мм каждый день Windows Service для запуска функции в указанное время. Беги немедленно
Поместите свой код в функцию и вызовите эту функцию в
Timer_Elapsed()
функция, которую вы когда-либо выбирали в приведенных выше примерах ссылокИспользуйте OnStart для настройки информации о таймере, чтения файлов конфигурации и т. Д.
Попробуйте использовать Windows Добавить / Удалить программы, чтобы удалить службу. (создайте установщик msi для установки службы. Сохраните ваши командные строки) Как создать установщик для.net Windows Service с использованием Visual Studio