Служба прослушивателя Windows

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

while(true) ;

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


person yuben    schedule 25.05.2009    source источник


Ответы (3)


Почему бы вам не использовать службу 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 < a href="http://msdn.microsoft.com/en-us/library/ms733069.aspx" rel="noreferrer">http://msdn.microsoft.com/en-us/library/ms733069.aspx< /а>

person Pavel Nikolov    schedule 25.05.2009
comment
Согласен на 100%. Это работа для WCF. Хотел бы я поставить вам +2. Один за предложение WCF, а другой за хорошие ссылки. - person Vadim; 25.05.2009
comment
Также см. это: peterkellner.net /2010/06/18/ - person Jeff Widmer; 05.10.2011

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

person leppie    schedule 25.05.2009