У меня есть приложение .Net 2.0, написанное на C #, которое контролирует другие компьютеры с Windows XP в локальной сети.В некоторых системах после длительного времени безотказной работы (от 40 до 120 дней) .Net Ping может перестать работать.Проверка связи с командной строкой Windows по-прежнему завершается успешно.
Как только произошел этот сбой, кажется, что все. Net Pings не работают.Отдельное приложение .Net, использующее аналогичный код, также не работает.
Вот пример кода:
internal static bool canPingHost(string host)
{
bool success = false;
const int PING_TIMEOUT_MS = 1000;
try
{
using (Ping p = new Ping())
{
PingReply pr = p.Send(host, PING_TIMEOUT_MS);
if (pr.Status == IPStatus.Success)
{
success = true;
}
}
}
catch
{
}
return success;
}
Ключевые моменты настройки для этой проблемы:
- Все ПК подключены к одному и тому же неуправляемому коммутатору
- Все другие ПК могут использовать один и тот же .Net Ping для связи с проблемной системой.
- Пинг Windows корректно работает в проблемной системе.
- Любое приложение .Net 2.0, которое было опробовано в проблемной системе, завершается неудачей.
- Операции с базой данных в проблемной системе и из нее также работают (соединение TCP)
- Остановка и запуск приложенияне решает проблему в проблемной системе.
При сбое этой системы я запускаю другое приложение с дополнительной информацией об отладке.
static string doping(IPAddress IP)
{
int PING_TIMEOUT_MS = 3000;
string rv = IP.ToString();
using (Ping p = new Ping())
{
bool success = false;
PingReply pr = null;
try
{
pr = p.Send(IP, PING_TIMEOUT_MS);
success = pr.Status == IPStatus.Success;
}
catch (Exception ex)
{
rv = rv +" [ " +ex.Message + " ] ";
}
if (pr != null)
{
if (success)
{
rv = rv + " yes " + pr.RoundtripTime.ToString();
}
else
{
rv = rv + " no " + pr.Status.ToString();
}
}
else
{
rv = rv + " no (fail) ";
}
}
return rv;
}
Вывод из программы192.168.0.2 no 1450
.
Переменная состояния PingReply
возвращает 1450 , который, как представляется, не определен в перечислении IPStatus
(PingReply.Status
).
После перезапуска проблемыкомпьютер, запускается .Net Pingдля правильной работы снова
Похоже, что существует проблема с ресурсом некоторого описания.Я не уверен, каким ресурсом это может быть.
Я читал о проблемах с асинхронными Ping и .Net 2.0.Это синхронный пинг, и, насколько я могу судить, это не влияет.
Я ищу:
- Профилактика проблемы, в первую очередь
- Предложения по отладке удаленной системы в случае ее сбоя (производственная система, Windows XP SP3, инструменты разработчика не установлены)
- Мониторинг ресурсов для определения, какая из них выходит из строя.
Предупреждения:
- Регулярно перезагружать проблемную систему в настоящее время не вариант.
- Обновление до последней версии .Net Framework в настоящее время недоступно.
- Изменение программного обеспечения, чтобы больше не использовать. Net Ping - вариант, но я все еще хотел бы знать, что происходит.