Я хочу захватить определенный, но не весь трафик HttpWebRequest в моем приложении для целей отладки. Это веб-сервис, обслуживаемый IIS.
Я прочитал Как настроить трассировку сети. Это отлично работает, но я не хочу направлять трассировку в файл из-за возможных проблем с правами на файловую систему, чувствительности к данным и т.д. Я хотел бы непосредственно захватить что-то в памяти, которое я могу впоследствии проверить или шифровать и отправлять по электронной почте. Предпочтительно, это не будет включать никаких изменений в файл 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>