Я пытаюсь зарегистрировать все исходящие HTTP-запросы и ответы, которые делает приложение. NET. Я следую этой статье из документации Microsoft: https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-configure-network-tracing
Я предоставляю краткий пример моего кода и app.config. Следующее работает должным образом и создает файл network.log
, который включает полное тело запроса и ответа. Однако это работает только на Windows и. NET Framework. Выполнение того же кода на Linux с использованием моно версии 5.18.1.0 - mono Program.exe
не создает файл network.log
и не вызывает никаких исключений.
C# Код:
using System;
using System.IO;
using System.Net;
namespace TraceTest
{
class Program
{
static void Main(string[] args)
{
WebRequest request = HttpWebRequest.Create("http://example.com");
using (WebResponse response = request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader streamReader = new StreamReader(responseStream))
{
Console.WriteLine("Received: " + streamReader.ReadToEnd());
}
}
}
}
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<system.diagnostics>
<sources>
<source name="System.Net" tracemode="includehex" maxdatasize="1024">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Verbose"/>
</switches>
<sharedListeners>
<add name="System.Net"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="network.log"
traceOutputOptions="ProcessId, DateTime"
/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
</configuration>
Есть ли способ записать все сетевые трафики c на Mono из самого приложения? Я не хочу запускать внешнюю программу для захвата трафика c.