есть ли какой-либо способ найти причину сбоя приложения .net, даже если будут обнаружены исключения

#c# #.net #wpf #exception #crash

Вопрос:

У меня есть приложение .net, которое выводит определенный порт после входа в систему.Я окружил логику в try catch и поймал исключение System.net.WebException в своих журналах. Но на некоторых компьютерах с Windows это приводит к случайному сбою приложения.

 
Error Message: WebException

Exception Type: System.Net.WebException

Error Location : Unable to connect to the remote server

InnerException: System.Net.Sockets.SocketException (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 127.0.0.1:9000
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socketamp; socket, IPAddressamp; address, ConnectSocketState state, IAsyncResult asyncResult, Exceptionamp; exception)

StackTrace:    at System.Net.HttpWebRequest.GetRequestStream(TransportContextamp; context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at tpsyncagent.MainWindow.<ConnectToTally>d__36.MoveNext() in C:codetpdesktopsyncagentMainWindow.xaml.cs:line 247
 

Это фрагмент кода

 try
{
    Stream dataStream = TallyRequest.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
catch(Exception e)
{
    //logging code
}
 

Комментарии:

1. Вы можете проверить средство просмотра событий Windows на наличие исключения

Ответ №1:

Если вы получаете случайные сбои, попробуйте разместить обработчик исключений для всех в своем классе приложений:

 protected override void OnStartup(StartupEventArgs e)
{
    AppDomain.CurrentDomain.UnhandledException  = CurrentDomain_UnhandledException;
    ... etc ...
 

Затем в этом обработчике сбросьте сообщение об исключении, внутреннее исключение и трассировку стека, чтобы увидеть, где оно выбрасывается. В данном конкретном случае вы знаете, что это исключение SocketException, поэтому вы также можете создать исключение для этого и проверить его свойство SocketErrorCode для получения дополнительной информации.