Создание сервиса windows без использования таймера - PullRequest
0 голосов
/ 06 марта 2020

Я создаю windows сервис, независимо от того, через какую статью я прохожу, они используют System.Timers.Timer, не говоря уже о том, почему они его используют.

Обязательно ли использовать Timer?

Эти ниже URL используют Timer с windows сервисом

https://www.c-sharpcorner.com/UploadFile/8a67c0/create-and-install-windows-service-step-by-step-in-C-Sharp/

https://www.c-sharpcorner.com/article/create-windows-services-in-c-sharp/

https://dzone.com/articles/create-windows-services-in-c

https://www.aspsnippets.com/Articles/Tutorial-to-create-a-simple-Windows-Service-with-sample-example-in-C-and-VBNet.aspx

Разве это нельзя сделать, просто написав код в этих методах

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    GetFailedProductDetails();
}

protected override void OnStop()
{
    base.OnStop();
}

Редактировать:

Logi c выполнять службу каждые 30 минут

<appSettings>
<add key ="Mode" value ="Interval"/>
<add key ="IntervalMinutes" value ="30"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>

Моя цель:

Я хочу запускать эту службу каждые 30 минут для выполнения метода GetFailedProductDetails(). Для этого я написал код в App.config файле.

1 Ответ

1 голос
/ 06 марта 2020

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

Конечно, вы могли бы настроить некрасивую систему с бесконечной for -l oop и Thread.Sleep(), но проблема, возникающая при запуске службы, Windows ожидает от OnStart до fini sh, поэтому можно сделать вывод, что служба начал , а не все еще запускается . Функция OnStart должна подготовить все для запуска операций службы, но она не должна сама выполнять эти операции.

Итак, причина, по которой таймер используется для этого, заключается в том, что * Функция 1019 * может корректно завершить sh, и затем после этого периодически сервисные операции, в вашем случае функция GetFailedProductDetails(), могут запускаться таймером.


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

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

...