Я хочу написать CustomTraceListener, который записывает все данные в БД SQL Server.Вот заглушка для этого:
public class SqlTraceListener : TraceListener
{
public SqlTraceListener()
: base()
{ }
public SqlTraceListener(String name)
: base(name)
{ }
protected override string[] GetSupportedAttributes()
{
List<string> attributes = new List<string>();
attributes.Add("connectionString");
attributes.Add("actionFilter");
attributes.Add("hostFilter");
return base.GetSupportedAttributes();
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{ }//Other empty methods...
}
В переопределенном методе TraceData я хочу перехватывать SOAP-сообщения, отправленные в мою службу WCF.Но когда я проверяю, что находится в параметре «data», я получаю следующее: (извините за публикацию xml в виде картинок - кажется, что редактор SO не допускает некоторые ключевые слова xml в сообщениях) :
Но в соответствии со стандартным XmlWriterTraceListener я должен получить это:
Как настроить TraceListener, чтобы не удалять сообщения SOAP?Мой конфиг здесь:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
<add name="sql"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\logs\StockPriceService.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml"/>
<add type="SqlTraceListener.SqlTraceListener, SqlTraceListener" name="sql"/>
</sharedListeners>
<trace autoflush="true"/>