Служба Windows: Служба не может быть запущена. Не удалось подключиться к сервисному контроллеру - PullRequest
0 голосов
/ 04 сентября 2018

Я искал решение, но не смог его найти. Вот код для службы Windows.

 protected override void OnStart(string[] args)
    {
        Debugger.Launch();
        try {
           AsynchronousSocketListener.StartListening();



            // Log an event to indicate successful start.

            EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);

        }
        catch(Exception ex)
        {
            // Log the exception.
            EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);


        }
    }

Вот класс AsynchronousSocketListner

 static string constr = "Integrated Security=SSPI;Persist Security Info=False;Data Source=WIN-OTVR1M4I567;Initial Catalog=CresijCam";

    //string test = constr;

    // Thread signal.  
    public static  ManualResetEvent allDone = new ManualResetEvent(false);

    private  AsynchronousSocketListener()
    {

    }
    public static void StartListening()
    {
        // Establish the local endpoint for the socket.  
        // The DNS name of the computer  

        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 1200);

        // Create a TCP/IP socket.  
        Socket listener = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        // Bind the socket to the local endpoint and listen for incoming connections.  
        try
        {
            listener.Bind(localEndPoint);
            listener.Listen(200);

            while (true)
            {
                // Set the event to nonsignaled state.  
                 allDone.Reset();

                // Start an asynchronous socket to listen for connections.  

                listener.BeginAccept(
                    new AsyncCallback(AcceptCallback),
                    listener);

                // Wait until a connection is made before continuing.  
                 allDone.WaitOne();
            }

        }
        catch (Exception e)
        {
            string me = e.Message;

        }

    }

Я получаю разные сообщения об ошибках каждый раз:

Тайм-аут (30000 миллисекунд) достигнут при ожидании ответа транзакции от службы TCPService.

Служба не может быть запущена. Процесс обслуживания не может подключиться к сервисному контроллеру

Я не знаю, откуда исходит ошибка, которую я получаю. Я знаю одно, что сервис еще не запущен. и именно в этом методе startListening (). Я отладил с помощью Debugger.launch (). Но я не иду к определенной линии. Я также думаю, что это где-то связано с TCP, но точно ничего.

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

1 Ответ

0 голосов
/ 04 сентября 2018

Этот простой ответ - ваш AsynchronousSocketListener не асинхронный, не потоковый или что-то в этом роде. По сути, ваш сервис Старт истекает, и никогда не достигнет

EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);

Потому что это по сути блокирует навсегда


Эта ошибка говорит само за себя

Тайм-аут (30000 миллисекунд) был достигнут во время ожидания ответ на транзакцию от службы TCPService.


OnStart должен только начать работу. Обычно это означает создание нового потока для выполнения реальной работы. Короче говоря, ожидается, что OnStart завершится быстро.

Вам понадобится рефакторинг вашего кода, чтобы запустить AsynchronousSocketListener в новом потоке или задаче

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