(Я новичок в службах Windows) У меня есть автоматическая служба 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- Каждый раз, когда я хочу удалить службу, мне приходилось запускать команду удаления два раза! Любая помощь?
Редактировать: записи вставляются в таблицу состязательно, и процесс вызова веб-службы и т. д. должен выполняться каждый раз, когда в таблицу вводится новая запись. Я думал, что нужен цикл While(true). Есть предложения по замене этой детали?
while (true)
--› это довольно тревожно, особенно то, что я не вижуbreak;
- person T.S.   schedule 22.02.2014while(true)
, ваша служба будет работать намного лучше. - person T.S.   schedule 22.02.2014onStart
должен быть освобожден от любой ответственности, кроме инициализации, такой как чтение файла конфигурации и т. д. Вы никогда не заканчиваете свой onStart, а затем пытаетесь запустить OnEnd :o)) - person T.S.   schedule 22.02.2014