Служба 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 ответ

Я выдвину некоторые предложения для вашего обслуживания.

  1. Сделайте так, чтобы ваш сервис начинался вручную. Поэтому после установки службы вы просто запускаете ее вручную только один раз.
  2. После запуска у вас есть несколько хороших вариантов для запуска вашей логики.

    , Запускайте каждые X минут http://www.codeproject.com/Questions/540617/windowsplusserviceplustoplusrunpluseveryplusoneplu

    , Запускать в чч: мм каждый день Windows Service для запуска функции в указанное время. Беги немедленно

  3. Поместите свой код в функцию и вызовите эту функцию в Timer_Elapsed() функция, которую вы когда-либо выбирали в приведенных выше примерах ссылок

  4. Используйте OnStart для настройки информации о таймере, чтения файлов конфигурации и т. Д.

  5. Попробуйте использовать Windows Добавить / Удалить программы, чтобы удалить службу. (создайте установщик msi для установки службы. Сохраните ваши командные строки) Как создать установщик для.net Windows Service с использованием Visual Studio

Другие вопросы по тегам