如何使用 .NET 网络跟踪记录网络流量的详细信息?

Eri*_*ult 5 .net httpwebrequest

我的应用程序正在使用其清单的配置设置(app.config;请参阅下面的 xml)来控制 .NET 网络跟踪(根据https://docs.microsoft.com/en-us/dotnet/framework/network-programming/network-追踪)。据我了解,这是一种“无代码”方法,它是从 app.config 文件中专门配置的,不需要实际代码来记录任何内容。在这种情况下,我以冗长的方式为一堆 System.Net 类初始化侦听器。所以我假设它会自动记录任何被调用的方法——比如从 HttpWebRequest.GetResponse() 方法捕获所有网络请求和响应(尤其包括异常)。它会自动输出到 initializeData 属性中指定的文件名。

除了我没有看到那个文件。根据下面的清单,我正在关注https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-configure-network-tracing 中的示例 .config 文件。要么没有记录任何内容,要么跟踪根本不起作用。我在项目的构建选项卡上选中了“定义跟踪常量”框,/bin/Debug 目录中的 MyApp.dll.config 文件是项目中主 app.config 文件的一个很好的副本。

我的假设是错误的,我必须编写代码吗?如果是这样,我从哪里获得低级网络详细信息(根据此处https://docs.microsoft.com/en-us/dotnet/framework/network-programming/interpreting-network-tracing)?我查看了一般跟踪文档(https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/tracing-and-instrumenting-applications)以及 TraceSource.TraceData 和 TraceSource。 TraceEvent 方法(和类似的方法)看起来很合适。但是,如何专门为 HttpWebRequest.GetResponse 实现这一点让我感到困惑。这些方法需要跟踪数据作为参数,而网络跟踪文档暗示它是自动的。

所以要么A)我的魔术日志文件在哪里,要么B)我该怎么做才能输出网络流量的跟踪?

<configuration> 
<system.diagnostics>
<trace autoflush="true" indentsize="4">
  <listeners>
    <add name="file" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\\MyApp\\bin\\Debug\\network.log"/>
  </listeners>
</trace>
<sources>
  <source name="System.Net" tracemode="protocolonly" maxdatasize="1024">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Cache">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Http">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.Sockets">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
  <source name="System.Net.WebSockets">
    <listeners>
      <add name="System.Net"/>
    </listeners>
  </source>
</sources>
<switches>
  <add name="System.Net" value="Verbose"/>
  <add name="System.Net.Cache" value="Verbose"/>
  <add name="System.Net.Http" value="Verbose"/>
  <add name="System.Net.Sockets" value="Verbose"/>
  <add name="System.Net.WebSockets" value="Verbose"/>
</switches>
<sharedListeners>
  <add name="System.Net"
       type="System.Diagnostics.TextWriterTraceListener"
       initializeData="C:\\MyApp\\bin\\Debug\\network.log"
       traceOutputOptions="ProcessId, DateTime"
  />
</sharedListeners>
<trace autoflush="true"/>
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)