Служба прослушивания Windows - PullRequest
3 голосов
/ 25 мая 2009

Как мне написать службу Windows на C #, которая прослушивает TCP-соединения и обрабатывает эти соединения? Проблема в том, что я хочу лучший способ, чем «блокировать» в основном потоке, например.

while(true) ;

Я могу запустить прослушиватель в другом потоке, но основной поток должен быть заблокирован для предотвращения выхода из приложения (и остановки службы). Спасибо.

Ответы [ 3 ]

5 голосов
/ 25 мая 2009

Почему вы не используете сервис WCF? - вы можете разместить службу WCF в службе Windows .... Затем вы можете использовать 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

3 голосов
/ 25 мая 2009

Лучше всего использовать ManualResetEvent, который будет блокироваться, пока вы не сообщите об этом.

0 голосов
/ 08 июня 2009

Если вы не используете WCF, то TcpListner - это путь.

По мере продвижения вперед с помощью этой службы Windows вам понадобится «сердцебиение», которое подтверждает, что служба по-прежнему работает. Самый простой способ сделать это - по таймеру (скажем, раз в минуту) обновлять базу данных. Это дает дополнительное преимущество, поскольку сервис остается «живым».

...