使用 CustomTraceListener 捕获 MessageLoggingTraceRecords 时 SOAP 消息为空

发布于 2024-11-03 22:36:24 字数 1664 浏览 0 评论 0原文

我想编写 CustomTraceListener 它将所有数据写入 SQL Server DB。 下面是它的存根:

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 中,我想捕获发送到我的 WCF 服务的 SOAP 消息。但是,当我检查“data”参数中的内容时,我得到以下信息:(抱歉将 xml 作为图片发布 - 看来编辑器不允许在帖子中使用某些 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"/>

I want to write CustomTraceListener which writes all data to SQL Server DB.
Here's the stub for it:

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...

}

In overridden method TraceData I want to catch SOAP messages sent to my WCF service. But when I check what is in "data" parameter I get this: (sorry for posting xml as pictures - it seems SO editor doesn't allow some xml keywords in posts):

enter image description here
But according to standard XmlWriterTraceListener I should get this:

enter image description here

How to configure TraceListener not to eliminate SOAP messages?
My config is here:

  <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"/>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

随波逐流 2024-11-10 22:36:24

您是否有任何原因不使用开箱即用的数据库跟踪侦听器?请参阅:企业库数据库跟踪侦听器?

Is there any reason you're not using the out of the box database trace listener? See: Enterprise Library Database Trace Listener?.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文