Я пытаюсь создать службу Windows, которая должна работать в фоновом режиме и прослушивать входящий трафик (обычный и обычный прослушиватель TCP)
мой код:
private TcpListener server;
public void startServer()
{
// EventLog.WriteEntry(source, "connected on: " + ipAddress.ToString() + " port: " + Service1.Port.ToString());
server = new TcpListener(IPAddress.Parse("127.0.0.1"), Service1.Port);
server.Start();
while (true)
{
var client = server.AcceptTcpClient();
new Thread(work).Start(client);
}
public void work(object client)
{
string msg = null;
var clientLocal = (TcpClient)client;
using (NetworkStream ns = clientLocal.GetStream())
using (StreamReader sr = new StreamReader(ns))
{
byte[] msgFullArray = new UTF8Encoding(true).GetBytes(msg);
fs.Write(msgFullArray, 0, msg.Length);
}
теперь, если вы вообще не смотрите на метод работы, так как всякий раз, когда я запускаю свой сервис, он зависает всякий раз, когда я пытаюсь запустить его на моем:
var client = server.AcceptTcpClient();
это означает, что моя служба никогда не использует метод Thread или мой рабочий метод. Из предыдущего ведения журнала я вижу, что он входит в мой цикл while, а затем просто отключает службу.
startServer
. Если он напрямую вызывается вашим методомOnStart
, это проблема. Как вы заметили,AcceptTcpClient
блокируется до тех пор, пока не появится клиент, но поток, для которого вызываетсяOnStart
, не принадлежит вам, и вы не должны его блокировать. - person Damien_The_Unbeliever   schedule 23.08.2016