|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] TimeOut для удаленного соединения по WMI на C# |
|
.NET - [решено] TimeOut для удаленного соединения по WMI на C#
|
Ветеран Сообщения: 5624 |
Профиль | Отправить PM | Цитировать Пишу небольшое приложение, использующее WMI для сбора данных с удаленных машин. Все работает, за исключением одного: В случае, если компьютер выключен/на нем нет WMI/другая причина недоступности, то соединение происходит очень долгое время.
Все попытки уменьшить таймаут для попытки соединения ни к чему не приводили. Вот как пытался: ConnectionOptions connOptions = new ConnectionOptions(); ObjectGetOptions getOptions = new ObjectGetOptions(); getOptions.Timeout = new System.TimeSpan(0, 0, 2); //2 секунды //ManagementScope machineScope = new ManagementScope(machineWmiNamespace, connOptions); //scope.Options.Timeout = New TimeSpan(20000000) //другим способом 2 секунды scope = new ManagementScope(pcstr, connOptions); scope.Options.Timeout = new TimeSpan(0, 0, 0); // и даже 0 секунд scope.Connect(); Цитата:
ПРобовал использовать PING, ответ получаю, проанализировать могу, но все равно очень долго. Есть ли какой нибудь способ указания таймаута при коннекте WMI на удаленную машину? |
||
------- Отправлено: 04:58, 27-10-2008 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Решил проблему, не в том направлении копал просто. Проще всего не через WMI, а, действительно через ping проверять доступность машины. Ниже приведен небольшой классик, который в течении 2-3 секунд дает ответ, есть пинг или нет. Если есть, результат мгновенно приходит. Если машина недоступна, то ответ приходит через пару секунд:
class QueryData { public bool HasPower(string who) { Ping pingSender = new Ping(); PingOptions options = new PingOptions(); // Use the default Ttl value which is 128, // but change the fragmentation behavior. options.DontFragment = true; // Create a buffer of 32 bytes of data to be transmitted. string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; byte[] buffer = Encoding.ASCII.GetBytes(data); int timeout = 10; PingReply reply; try { reply = pingSender.Send(who, timeout, buffer, options); if (reply.Status == IPStatus.Success) { return true; } else { return false; } } catch { return false; } } } |
------- Отправлено: 04:37, 28-10-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 129
|
Профиль | Отправить PM | Цитировать Если кого заинтересует ping средствами JScript:
на MSDN можно более подробно рассмотреть Win32_PingStatus |
Последний раз редактировалось menpavel, 08-06-2010 в 12:38. Причина: обшипся Отправлено: 12:36, 08-06-2010 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Помогите найти скрипт для удаленного удаления програм | magwolf | Скриптовые языки администрирования Windows | 20 | 01-02-2016 23:35 | |
Ошибка - [решено] WMI namespace | Cr00t | Microsoft Windows 2000/XP | 1 | 18-08-2009 13:26 | |
Службы - [решено] Необходимый минимум для нормального соединения по оптоволокну(fiber) | Letik | Microsoft Windows 2000/XP | 2 | 09-01-2009 16:26 | |
DFS => Timeout после закрытия файла? | uptk | Microsoft Windows NT/2000/2003 | 0 | 07-11-2008 17:05 | |
Ошибка - [решено] 1(Одна ошибка WMI) | mikola1983 | Microsoft Windows 2000/XP | 2 | 21-09-2007 14:36 |
|