【问题标题】:Windows Listener ServiceWindows 侦听器服务
【发布时间】:2010-10-28 17:52:59
【问题描述】:

如何在 C# 中编写一个 Windows 服务来侦听 tcp 连接并处理这些连接?问题是我想要一个比在主线程中“阻塞”更好的方法,例如

而(真);

我可以在另一个线程上启动侦听器,但主线程需要阻塞以防止应用程序退出(以及服务停止)。 谢谢。

【问题讨论】:

    标签: c# multithreading windows-services tcplistener


    【解决方案1】:

    为什么不使用 WCF 服务? - 您可以在 Windows 服务中托管 WCF 服务....然后您可以使用 NetTcpBinding(以便通过 tcp 进行通信) 所以我们的代码看起来像

    namespace WindowsService1
    {
        public partial class Service1 : ServiceBase
        {
            internal static ServiceHost myServiceHost = null;
    
            public Service1()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                if (myServiceHost != null)
                {
                    myServiceHost.Close();
                }
                myServiceHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
                myServiceHost.Open();
            }
    
            protected override void OnStop()
            {
                if (myServiceHost != null)
                {
                    myServiceHost.Close();
                    myServiceHost = null;
                }
            }
        }
    }
    

    以下是一些示例: http://www.pluralsight.com/community/blogs/aaron/archive/2008/12/02/screencast-hosting-wcf-services-in-windows-services.aspx http://msdn.microsoft.com/en-us/library/ms733069.aspx

    【讨论】:

    • 同意 100%。这是 WCF 的工作。我希望我能给你+2。一个用于建议 WCF,另一个用于良好的链接。
    【解决方案2】:

    最好可能使用ManualResetEvent,它会阻塞直到你发出信号。

    【讨论】:

      【解决方案3】:

      如果你不使用 WCF,那么TcpListner 是要走的路。

      随着您继续使用此 Windows 服务,您将需要某种类型的“心跳”来验证该服务是否仍在运行。最简单的方法是让计时器(例如,每分钟一次)更新数据库。这具有保持服务“活跃”的额外好处。

      【讨论】:

        猜你喜欢
        • 2016-12-30
        • 2015-10-06
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多