我正在嘗試爲企業庫日誌記錄編寫自定義跟蹤偵聽器,它將所有日誌消息發送到任意WCF端點。這背後的想法是,我可以在另一端設置一個簡單的控制檯應用程序等,它可以實時打印所有日誌消息。企業庫日誌記錄:將消息發送到任意WCF端點的自定義跟蹤偵聽器
我的問題是兩個部分:
- 是否有一個機制,已經做到這一點?我已經看過MSMQ監聽器,並且我對此沒有興趣,因爲我可能需要在某個時候使用不同的協議/綁定。
- 我在下面實現的方式 - 是否足夠高效或有更好的方法?我擔心的是,每次記錄器發出的消息(可能會頻繁出現),我都會打開一個新頻道,然後關閉它。這會造成性能問題嗎?
在我的樣本RemoteClient
派生自ClientBase<T>
。
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class RemoteTraceListener : CustomTraceListener
{
public override void Write(string message)
{
RemoteClient client = new RemoteClient();
client.Open();
client.Write(message);
client.Close();
}
public override void WriteLine(string message)
{
RemoteClient client = new RemoteClient();
client.Open();
client.WriteLine(message);
client.Close();
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry && this.Formatter != null)
{
WriteLine(this.Formatter.Format(data as LogEntry));
}
else
{
WriteLine(data.ToString());
}
}
}
我不清楚你的意思是「彙集」它。 IIS中是否有某種緩存機制可以使用,或者是否將它作爲某種單例實現?另外,流媒體是什麼意思?你的意思是像使用會話的TCP綁定?這意味着要保持渠道暢通,對嗎?我想知道這會對性能,系統穩定性等帶來什麼影響。僅供參考,現在我正在使用netMSMQ綁定,因此如果我繼續沿着這條路走下去,會話似乎不是一種選擇。 –
我相信'ClientBase'已經實現了Thilak通過'共享'的含義。它基本上緩存了一個ChannelFactory,所以當你用'新Client'時它將重用現有的無故障客戶端(幕後緩存) –