【问题标题】:run a socket from a windows service从 Windows 服务运行套接字
【发布时间】:2019-04-04 18:13:55
【问题描述】:

我需要运行一个始终作为 Windows 服务侦听的套接字。 我在 C# 中这样做

我的程序有一个可执行版本,它使用以下代码

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

            Console.WriteLine("sock2");

此代码在将程序作为可执行文件运行时有效,但在作为服务运行时无效,因为套接字侦听器永远不会返回,因此会阻止服务启动。 (“sock2”从不打印)

我尝试了以下代码来异步运行套接字侦听器(这是在程序的可执行版本而不是服务版本中完成的,这就是为什么存在 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 打印),问题是该程序在主线程完成后立即终止(用它关闭套接字线程)

我怎样才能让它作为服务工作?

【问题讨论】:

    标签: c# multithreading service


    【解决方案1】:

    它接缝我不需要做任何事情 当作为服务运行时,它在后台保持活动状态

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2019-10-07
      • 1970-01-01
      • 2012-06-12
      • 2013-08-18
      • 1970-01-01
      • 2019-09-19
      • 2013-04-12
      • 2014-05-16
      相关资源
      最近更新 更多