Remote Logging

kahuna

Erfahrenes Mitglied
Tach auch.

Ich habe mir vorgenommen, ein RemoteLogging Programmsche zu schreiben.

Die Frage die sich mir aufzwängt ist Folgende: In .NET gibt es so viele verschiedene Möglichkeiten die Logeinträge an den Server zu versenden, dass ich mich frage, welcher nun der beste ist...

Da es ja um Logging geht, suche ich nach dem schnellsten Weg. Channels? Sockets? Webservices?

Ideeen? Anregungen? Erfahrungen?


Danke und Gruss
kahuna
 
Hallo.

Die schnellste Art? Wäre dann wohl die Datenübertragung mittels UDP.

Dazu brauchst du die UdpClient Klasse aus System.Net.Sockets, welche sich sehr einfach verwenden lässt.

Hier hast auch gleich 2 einfache Beispiele für einen Sender, und einen Listener.

Sender..
Code:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

public class Sender
{
	public static void Main()
	{
		Sender s = new Sender("localhost", 5900);
		s.Send("Huhu..");
		s.Send("Sender Test .. ;)");
	}
	
	private string host;
	private int port;
	private UdpClient udpClient;
	
	public Sender(string host, int port)
	{
		this.host = host; this.port = port;
		udpClient = new UdpClient(host, port);
	}
	
	~Sender()
	{
		udpClient.Close();
	}
	
	// Sendet Daten via UDP ..
	// versieht sie noch mit einem Timestamp =)
	public void Send(string message)
	{
		TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
		byte[] b = Encoding.UTF8.GetBytes((int)t.TotalSeconds + " " + message);
		udpClient.Send(b,b.Length);		
	}
	
}

Listener..
Code:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

class TestListener
{
	[STAThread]
	static void Main(string[] args)
	{
		Thread t = new Thread(new ThreadStart(Listen));
		t.Start();

		string line;
		while ((line = Console.ReadLine()) != "quit")
		{
		}

		uc.Close();
	}

	private static UdpClient uc;

	private static void Listen()
	{
		uc = new UdpClient(5900);
		IPEndPoint ip = null;
		while (true)
		{
			try
			{
				byte[] blubb = uc.Receive(ref ip);
				string line = Encoding.Default.GetString(blubb);
				Console.WriteLine(line + " von " + ip.ToString());
			}
			catch (SocketException ex)
			{
				return;
			}
		}
	}
}

MfG,
Alex
 
Hallo,

Danke erst mal. Wie is denn das mit UDP übers Internet? Funktioniert das genauso? Ich kann mich noch dunkel erinnern, als ich unter java mit UDP gearbeitet habe, dass dies auf das eigene lokale Netzwerk beschränkt war...

Irre ich mich da?

Gruss kahuna
 
Original geschrieben von kahuna
Hallo,

Danke erst mal. Wie is denn das mit UDP übers Internet? Funktioniert das genauso? Ich kann mich noch dunkel erinnern, als ich unter java mit UDP gearbeitet habe, dass dies auf das eigene lokale Netzwerk beschränkt war...

Irre ich mich da?

Gruss kahuna

Habs jetzt mal mit einem Freund übers Internet getestet. Es funktioniert. :)
 
Was soll man da schon sagen. Schneller als mittels Sockets / TcpClient, aber du kannst dir nicht sicher sein, das an der Gegenstelle was empfangen wird.
 
Ich überleg mir nur gerade: Die Clients meines Frameworks sind Firmenintern. Abgeschirmt durch Proxy und Firewalls. Ich möchte nun aber z.B. auch zu Hause den LogginServer starten und messages empfangen. Kommt UDP durch Proxy etc durch? Oder muss ich da auf nen HttpChannel umsteigen?

Gruss kahuna
 
Jojo ich habe letzteres nun angewendet und das scheint mal vorerst zu funktionieren. Hab allerdings die Sache mit dem firewall noch nicht ausprobieren können.

Gruss kahuna
 
Zurück