none
Windows Service какой Timer? RRS feed

  • Вопрос

  • Добрый день.

    Задача. Как только на удалённом сервере происходит изменение, например появился новый пользователь, мне необходимо данную информацию как то увидеть.

    Для этого я решил создать WindiwsService. Пусть тихонько сидит и периодически считывает из удалённой базы ...Count().

    Создал простой сервис работает запускается и висит в службах, но возник вопрос с периодичностью проверки.

    в методе

            protected override void OnStart(string[] args)
            {
                notif = new Notification();
                Thread loggerThread = new Thread(new ThreadStart(notif .Start));
                loggerThread.Start();
            }

        class Notification
        {
            public Notification()
            {
    
            }
            public async void Start()
            {
                string data = await _aq.LoadCountPerson();
            }

    Подумал через Timer. Но он по-моему не работает со службами.

    Машинный перевод ряда подобных статей не совсем внёс разъяснения.

    То ли использовать Thread Timer, то ли вообще консольное приложение, то ли какую то другую службу.

    Создавать Bat файл и запускать какое нибудь консольное приложение при старте не очень хочется. пусть лучше всегда висит в службах и периодически считывает данные с удалённой базы.

    Речь не только идёт о количестве пользователей, но и например о том, когда пользователь пришлёт какую-нибудь ошибку.

    Просто к базе из клиентского приложения я обращаюсь через  WCF сервис.

    Как лучше фоново проверять изменения в базе?

    21 ноября 2016 г. 4:27

Ответы

  • "Подумал через Timer. Но он по-моему не работает со службами." - но статья, на которую вы даете ссылку, утверждает обратное. Делаете ли вы в точности как в статье? Переменная таймера - поле класса, а не локальная переменная?
    • Помечено в качестве ответа DevingAs 21 ноября 2016 г. 7:24
    21 ноября 2016 г. 5:12
  • Ничего не имею против служб, но может стоит сделать программу? Просто сегодня вам только уведомление о новом пользователе, завтра еще чего, а послезавтра созреете на администраторскую программу управления.

    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 21 ноября 2016 г. 7:24
    21 ноября 2016 г. 6:19
    Отвечающий

Все ответы

  • "Подумал через Timer. Но он по-моему не работает со службами." - но статья, на которую вы даете ссылку, утверждает обратное. Делаете ли вы в точности как в статье? Переменная таймера - поле класса, а не локальная переменная?
    • Помечено в качестве ответа DevingAs 21 ноября 2016 г. 7:24
    21 ноября 2016 г. 5:12
  • Ничего не имею против служб, но может стоит сделать программу? Просто сегодня вам только уведомление о новом пользователе, завтра еще чего, а послезавтра созреете на администраторскую программу управления.

    VB.Net - WPF, UWP

    • Помечено в качестве ответа DevingAs 21 ноября 2016 г. 7:24
    21 ноября 2016 г. 6:19
    Отвечающий
  • Администраторская есть уже в начальной стадии :).Но как то не люблю много открытых приложений и иногда случайно закрываю её. Подумал фоном сделать, чтобы не закрыть её было случайно.
    21 ноября 2016 г. 7:24
  • По поводу выбора между службой и приложением - это по ситуации. Смысл службы, чтобы все работало независимо от сеансов пользователей. Если этот аспект важен, делайте службу, а графический интерфейс будет взаимодействовать с ней через какую-либо технологию межпроцессного обмена. Если нет, конечно достаточно обычного приложения сворачивающегося в панель уведомлений.

    Предотвращение случайного закрытия решается простым запросом подтверждения. Если не уверены, нужна служба или нет, сделайте ядро программы в виде DLL, чтобы можно было легко перенести в новый проект.

    Кстати, если что-то в службе не пашет, это могут быть проблемы с правами доступа пользователя, из-под которого она запускается. В отличие от GUI-потоков, фоновые потоки, скорее всего, молча проглотят ошибку не выводя ничего ни на экран ни в журнал. Поэтому обработка исключений и ведение логов важно для служб.


    • Изменено VadimTagil 21 ноября 2016 г. 8:06
    21 ноября 2016 г. 8:05