запустить сокет из службы Windows - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно запустить сокет, который всегда прослушивается как служба Windows. Я делаю это в C #

У меня есть исполняемая версия моей программы, которая использует следующий код

Console.WriteLine("sock1");
                SynchronousSocketListener synchronousSocketListener = new SynchronousSocketListener();
            synchronousSocketListener.StartListening();

            Console.WriteLine("sock2");

Этот код работает при запуске программы в качестве исполняемого файла, но не работает при запуске в качестве службы, поскольку прослушиватель сокетов никогда не возвращается и, таким образом, блокирует запуск службы. («sock2» никогда не печатает)

Я попробовал следующий код для асинхронного запуска прослушивателя сокетов (это было сделано в исполняемой версии программы, а не в версии servicce, поэтому существует метод main, а не метод onStart.

class Program
{

    public static int Main(String[] args)
    {

        Console.WriteLine("sock1");
        Program a = new Program();
        var blah = a.startSocketListenerAsync();
        Console.WriteLine("sock2");

        Thread.sleep(1000000);
        return 0;
    }

    public async Task<string> startSocketListenerAsync()
    {
        SynchronousSocketListener synchronousSocketListener = new SynchronousSocketListener();
        await Task.Run( ()  => synchronousSocketListener.StartListening() );

        return "hello world";

    }

}

Это запускает прослушиватель сокетов асинхронно (печатает sock2), если я установил достаточно длительный период ожидания, проблема в том, что эта программа завершается, как только основной поток завершает работу (закрывая с ним поток сокетов)

Как я могу заставить это работать как услуга?

1 Ответ

0 голосов
/ 05 апреля 2019

Похоже, мне не нужно ничего делать при запуске в качестве службы, она остается активной в фоновом режиме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...