デバッグの目的で、アプリケーション内のすべてではなく特定の HttpWebRequest トラフィックをキャプチャしたいと考えています。これは、IIS によってホストされる Web サービスです。
How to: Configure Network Tracingを読みました。これはうまく機能しますが、ファイル システムのアクセス許可の問題やデータの機密性などの可能性があるため、トレースをファイルに送信したくありません。メモリ内の何かに直接キャプチャして、後で検査できるようにしたいと考えています。または暗号化して電子メールで送信します。できれば、これには app.config ファイルへの変更は含まれません。
私は次のことを試しましたが、明らかに TextWriterTraceListener を System.Net に結び付ける手順がありません。System.Net トラフィックを StringWriter にキャプチャするにはどうすればよいですか?
StringWriter sw = new StringWriter();
TextWriterTraceListener myListener = new TextWriterTraceListener(sw);
Trace.Listeners.Add(myListener);
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://www.microsoft.com");
HttpWebResponse resp = (HttpWebResponse) req.GetResponse();
Stream s = resp.GetResponseStream();
byte[] buf = new byte[4096];
while (s.Read(buf, 0, buf.Length) > 0) ;
s.Close();
myListener.Flush();
sw.Flush();
編集:具体的には、実行時にこれと同等のことを行いたいのですが、出力をnetwork.logに送りたくないことを除いて、この目的のために設定した文字列バッファに送りたいのです。
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net.Sockets" tracemode="includehex">
<listeners>
<add name="System.Net.Sockets" type="System.Diagnostics.TextWriterTraceListener" initializeData="network.log" />
</listeners>
</source>
</sources>
<switches>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
<trace autoflush="true" />
</system.diagnostics>
</configuration>