我的应用正在使用其清单的配置设置(app.config;请参见下面的xml)来控制.NET网络跟踪(按照https://docs.microsoft.com/en-us/dotnet/framework/network-programming/network-tracing)。据我了解,这是一种“无代码”方法,专门通过app.config文件配置,不需要实际代码即可记录任何内容。在这种情况下,我将以冗长的方式初始化一堆System.Net类的侦听器。因此,我假设它将自动记录所有被调用的方法,例如从HttpWebRequest.GetResponse()方法捕获所有网络请求和响应(特别是包括异常)。它将自动输出为initializeData属性中指定的文件名。
除非我没有看到该文件。根据下面的清单,我正在跟踪https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-configure-network-tracing中的示例.config文件。要么什么都没有记录下来,要么根本无法跟踪。我在项目的“生成”选项卡上选中了“定义TRACE常量”框,/ 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>