c# Dienst zu hören, ein Hafen
Ich glaube, was ich bin auf der Suche zu erstellen, ist ein Dienst, der lauscht an einem bestimmten port, und, wenn Daten an diesen port sendet es ab, dass Daten an ein anderes script für die Verarbeitung.
Für einige Grund aber, den Dienst mal aus, wenn ich versuche, es zu starten. Meine logs sagt mir TcpClient client = server.AcceptTcpClient();
ist, wo ist es zu stoppen (eigentlich ist es immer fest auf 'Start' in Services).
Da ich keine Erfahrung mit C#, die Dienstleistungen oder arbeiten mit Servern in dieser Art und Weise, der code ist ziemlich genau das, was ich online gefunden.
OnStart-Methode sieht wie folgt aus.
protected override void OnStart(string[] args)
{
try
{
TcpListener server = null;
//Set the TcpListener on port 13000.
Int32 port = 1234;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
//TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);
//Start listening for client requests.
server.Start();
//Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;
//Enter the listening loop.
while (true)
{
//Perform a blocking call to accept requests.
//You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
data = null;
//Get a stream object for reading and writing
NetworkStream stream = client.GetStream();
int i;
//Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
//Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
//Process the data sent by the client.
data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
//Send back a response.
stream.Write(msg, 0, msg.Length);
}
//Shutdown and end connection
client.Close();
}
}
catch (SocketException e)
{
}
finally
{
}
}
- Ich nehme an, du meinst einen Windows-Dienst. Was macht Ihr
OnStart()
Methode Aussehen? - Tipp: Eine einfache Möglichkeit, um Windows-Dienste (und testen) ist die Verwendung von TopShelf - auf Nuget. Es gibt Ihnen eine einfache exe-Datei, die Sie ausführen können, auf Befehl, oder können Sie installieren und als Dienst ausgeführt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als weit als erstellen der Windows-Dienst selbst, Sie sollten in der Lage sein zu verwenden dieser link, auch wenn es datiert. Diese companion link zeigt, wie Sie den Dienst installieren und deinstallieren von selbst. Schließlich verwenden dieser link zu verstehen, wie Sie Ihren service ständig laufen und wie Sie richtig reagieren, um start-und stop-Befehle.
Ihre service-Interaktion mit dem socket, das Sie ändern möchten
WorkerThreadFunc()
aus dem letzten link. Dies ist, wo Sie beginnen sollte, das hören und die Verarbeitung der eingehenden socket-verbindungen.Als pro MSDN, tcpserver gestartet.AcceptTcpClient Blöcke, also bist du wahrscheinlich nie wieder von Ihrem Dienst die OnStart-Methode, die bewirkt, dass der Dienst eigentlich nie "start".
Könnten Sie erwägen, einen anderen thread und die Rückgabe von OnStart so bald wie möglich.
Cheers