Custom WCF MSMQ-Tracer
Posted in Allgemein on November 30th, 2009 by Andreas SchwarzWCF Custom MSMQ Tracer – Sample
Das Standard-Traceing im WCF Framework ist erstaunlich einfach anzuwenden und zu konfigurieren. Auch das im Framework enthaltene Analysetool ist ganz brauchbar.
So viel Luxus ist man gar nicht gewohnt wenn man vorher hauptsächlich mit dem WSE-Framework zu tun hatte…
Leider ist Microsoft den Weg nicht komplett zu Ende gegangen. Gibt man sich nicht mit der Erzeugung von Logdateien zufrieden, sondern will das Ganze in eine Datenbank bzw. Message Queue persistieren darf man wieder selbst tätig werden.
Ich würde davon abraten das komplette Traceing direkt synchron aufzusetzen. Es hat sich bewährt die Nachrichten zuerst einmal zwischenzulagern und die Verarbeitung dann asynchron auszuführen.
public class MsmqTracer : TraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (!string.IsNullOrEmpty(traceQueue))
{
try
{
MessageQueue msmq = new MessageQueue(traceQueue);
MessageQueueTransaction trans = new MessageQueueTransaction();
trans.Begin();
Message msg = new Message(data.ToString(), new XmlMessageFormatter());
msmq.Send(msg, trans);
trans.Commit();
}
catch (Exception msmqEx)
{
Debug.WriteLine(string.Format("Error while persisting trace: {0}", msmqEx.ToString()));
}
}
else
{
Debug.WriteLine("Missing MSMQ Trace");
}
}
public override void Write(string message) {}
public override void WriteLine(string message) {}
