У меня есть список IP-адресов сервера и часть моего приложения перед отправкой запроса на каждый сервер, я пингует его. Когда я тестирую его через VS 2012, частично просматриваю, он останавливается и отображает страницу в VS, говоря «Невозможно подключиться к удаленному серверу». У меня есть ping в try-catch, но он не попадает в раздел исключений; он просто умирает, исполняя ping.send(). Некоторые из других пингов тайм-аут, и я их поймаю и отображаю надлежащее сообщение. Когда я проверяю след исключения (ниже), он говорит: «Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него». Есть ли способ поймать и обработать это, а не остановить запуск программы?Ping вызывает необработанное исключение
Это код (частичные) пинг:
public static string PingServer(string host)
{
PingOptions options = new PingOptions();
options.DontFragment = true;
Ping p = new Ping();
PingReply reply = null;
string NetworkMessage = string.Empty;
try
{
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
Console.WriteLine(host);
reply = p.Send(host, timeout, buffer, options);
Это след исключение:
System.Net.WebException was unhandled
HResult=-2146233079
Message=Unable to connect to the remote server
Source=System
StackTrace:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at PASSCrawlerNS.PASSCrawler.GetResponseCallback(IAsyncResult ar) in c:\Users\blah\Documents\Visual Studio 2012\Projects\test\test\Program.cs:line 102
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.HttpWebRequest.SetResponse(Exception E)
at System.Net.ConnectionReturnResult.SetResponses(ConnectionReturnResult returnResult)
at System.Net.Connection.CompleteConnectionWrapper(Object request, Object state)
at System.Net.PooledStream.ConnectionCallback(Object owningObject, Exception e, Socket socket, IPAddress address)
at System.Net.ServicePoint.ConnectSocketCallback(IAsyncResult asyncResult)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.Sockets.Socket.ConnectCallback()
at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object state, Boolean timedOut)
InnerException: System.Net.Sockets.SocketException
HResult=-2147467259
**Message=No connection could be made because the target machine actively refused it** 56.245.253.10:80
Source=System
ErrorCode=10061
NativeErrorCode=10061
StackTrace:
at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
InnerException:
Когда я вручную пинг этот сервер (56.245.253.10), он отвечает.
Какое исключение вы поймаете? Это во время отладки? Что произойдет, если вы нажмете F5/продолжите отладку? – rene
У вас уже есть 'try' вокруг этого кода, так как выглядит' catch'? Кроме того, вы можете нажать «Ctrl + Alt + E» и установить/снять отметку «Брошено» в разделе «Исключения общего времени выполнения языка», чтобы ваш отладчик предоставил больше/меньше информации об исключениях в вашей программе. – gunr2171
Более простой вопрос: когда VS останавливает вашу программу из-за исключения, она выделяет строку. Какого цвета это? Если он желтый, вы не обрабатываете исключение. Если это зеленый-иш, он будет обработан, и вы можете нажать F5, чтобы продолжить работу. – gunr2171