Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 126

Пропустить ошибку "Сервер RPC недоступен"

16.08.2024, 11:51. Показов 2031. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извините за много кода. Код собирает информацию на компьютерах от 10.62.39.58 до 10.62.39.61. Проблема в том, что в таблицу базы данных заносятся только компьютеры

Не заносятся компьютеры на которых сервер RPC недоступен. Как изменить код, чтобы на компьютерах, на которых сервер RPC недоступен, в столбец ip_address заносился ip-адрес, а в столбец computer_name "Недоступен".
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
private void button1_Click(object sender, EventArgs e)
        {
            string connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\MyPCProject\\MyPCProject\\Database1.mdf;Integrated Security=True";
 
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
 
                var octets1 = ipAddressControl1.GetAddressBytes();
                var octets2 = ipAddressControl2.GetAddressBytes();
 
                if (octets1.Length >= 4 && octets2.Length >= 4 && octets1[0] == octets2[0] && octets1[1] == octets2[1] && octets1[2] == octets2[2])
                {
                    if (octets1[3] < octets2[3])
                    {
                        string baseIpAddress = $"{octets1[0]}.{octets1[1]}.{octets1[2]}.";
 
                        ClearTable(connection); // Очистка таблицы
 
                        for (int i = octets1[3]; i <= octets2[3]; i++)
                        {
                            string ipAddress = $"{baseIpAddress}{i}";
                            string macAddress = GetMacAddress(ipAddress); // Получение MAC-адреса
 
                            if (!string.IsNullOrEmpty(macAddress))
                            {
                                string computerName = GetComputerName(ipAddress); // Получение имени компьютера
                                string userName = GetUserName(ipAddress); // Получение имени пользователя
 
                                InsertDataIntoDatabase(connection, ipAddress, computerName, userName, macAddress);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Первые три октета совпадают, но 4-й октет первого IP не меньше 4-го октета второго IP.");
                    }
                }
                else
                {
                    MessageBox.Show("Первые три октета IP-адресов не совпадают.");
                }
 
                connection.Close();
            }
        }
 
        private string GetMacAddress(string ipAddress)
        {
            string macAddress = string.Empty;
 
            try
            {
                ManagementScope scope = new ManagementScope($"\\\\{ipAddress}\\root\\cimv2");
                scope.Connect();
 
                ObjectQuery query = new ObjectQuery("SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    macAddress = queryObj["MACAddress"] as string;
                    if (!string.IsNullOrEmpty(macAddress))
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при получении MAC-адреса для IP-адреса {ipAddress}: {ex.Message}");
            }
 
            return macAddress;
        }
 
        private string GetComputerName(string ipAddress)
        {
            string computerName = "Недоступен";
 
            try
            {
                ManagementScope scope = new ManagementScope($"\\\\{ipAddress}\\root\\cimv2");
                scope.Connect();
 
                ObjectQuery query = new ObjectQuery("SELECT Name FROM Win32_ComputerSystem");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    computerName = queryObj["Name"] as string;
                    if (!string.IsNullOrEmpty(computerName))
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при получении имени компьютера для IP-адреса {ipAddress}: {ex.Message}");
            }
 
            return computerName;
        }
 
        private string GetUserName(string ipAddress)
        {
            string userName = "Неизвестно";
 
            try
            {
                ManagementScope scope = new ManagementScope($"\\\\{ipAddress}\\root\\cimv2");
                scope.Connect();
 
                ObjectQuery query = new ObjectQuery("SELECT UserName FROM Win32_ComputerSystem");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    userName = queryObj["UserName"] as string;
                    if (!string.IsNullOrEmpty(userName))
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при получении имени пользователя для IP-адреса {ipAddress}: {ex.Message}");
            }
 
            return userName;
        }
 
        private void InsertDataIntoDatabase(SqlConnection connection, string ipAddress, string computerName, string userName, string macAddress)
        {
            string query = "INSERT INTO [Table] (ip_address, computer_name, username, mac_address) VALUES (@IPAddress, @ComputerName, @UserName, @MacAddress)";
 
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Parameters.AddWithValue("@IPAddress", ipAddress);
                command.Parameters.AddWithValue("@ComputerName", computerName);
                command.Parameters.AddWithValue("@UserName", userName);
                command.Parameters.AddWithValue("@MacAddress", macAddress);
 
                try
                {
                    command.ExecuteNonQuery();
                    Console.WriteLine($"Имя компьютера для IP-адреса {ipAddress}: {computerName}, добавлено в базу данных.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Ошибка при вводе данных для IP-адреса {ipAddress}: {ex.Message}");
                }
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2024, 11:51
Ответы с готовыми решениями:

Сканирование адресов в backgroundworker. Ошибка "Сервер RPC недоступен"
Всем привет. Извините если не так оформил название темы. Написал код, который сканирует диапозон айпи адресов, после чего ищет в них...

Ошибка "Сервер RPC недоступен" при повторном обращении к Word
Добрый день! Вывожу на печать с формы в документ Word. Все получается. Но при закрытии и при повторном нажатии по кнопке печать, ошибка...

Соединение с БД на сервере вызывает ошибку "Сервер не найден или недоступен"
Здравствуйте! Пишу клиент БД. Сама БД находится на сервере. Строка соединения в xml файле. Файл: &lt;?xml version=&quot;1.0&quot;...

25
 Аватар для MallSerg
95 / 63 / 14
Регистрация: 16.11.2018
Сообщений: 296
22.08.2024, 19:28
Студворк — интернет-сервис помощи студентам
Какойнить врапер для nmap C# гораздо функциональнее WMI запросов
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,714
22.08.2024, 21:29
wizard41, сам великий майк (ой Бил)ему говорит, ну вот что то в твоем алгоритме не так!!! Игнорить дальше? Ну глупо.
0
 Аватар для Andrey-MSK
3375 / 2261 / 388
Регистрация: 14.08.2018
Сообщений: 7,666
Записей в блоге: 4
23.08.2024, 08:25
Цитата Сообщение от VladimirU Посмотреть сообщение
Игнорить дальше? Ну глупо.
Если ты знаешь как эту ошибку правильно обработать, знаешь что она не причинит вреда при исполнении кода после твоих манипуляций, да ещё в условии нужно продолжать выполнение цикла, то в чём проблема? Ошибка перехвачена, обработана, приложение работает дальше как и задумывалось, что в этом глупого? Для чего тогда существует try .. catch как ни для этого?

То что ТС не написал обработчики в catch, то это его проблема, можно было хоть логи там писать или ещё чего, но задача решена -> цикл продолжает работу без падения.
0
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 126
23.08.2024, 11:06  [ТС]
Всем огромное спасибо за помощь!

Добавлено через 51 минуту
Только долго собирается информация с компьютеров. А если их 1000???

Добавлено через 33 минуты
Попробую ввести многопоточность.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Parallel.For(octets1[3], octets2[3] + 1, i =>
{
    string ipAddress = $"{baseIpAddress}{i}";
 
    Computers computer = new Computers
    {
        IPAddress = ipAddress,
        PCName = GetInformation(ipAddress, "Name", "Win32_ComputerSystem"),
        UserName = GetInformation(ipAddress, "UserName", "Win32_ComputerSystem"),
        MAC = GetInformation(ipAddress, "MACAddress", "Win32_NetworkAdapterConfiguration"),
        OS = GetInformation(ipAddress, "Caption", "Win32_OperatingSystem")
    };
 
    try
    {
        lock(computers) // Блокировка для безопасного доступа к списку
        {
            computers.Add(computer);
        }
 
        Application.DoEvents();
    }
    catch (Exception ex)
    {
        if (ex.HResult.Equals(0x800706BA))
        {
#if DEBUG
            Debug.WriteLine($"Ошибка при добавлении компьютера с IP-адресом {ipAddress}: Сервер RPC недоступен.");
#else
            // Тут, если нужно, выводить что-то пользователю в UI в режиме Release
#endif
        }
    }
});
0
 Аватар для Andrey-MSK
3375 / 2261 / 388
Регистрация: 14.08.2018
Сообщений: 7,666
Записей в блоге: 4
23.08.2024, 11:14
Цитата Сообщение от atm87 Посмотреть сообщение
Попробую ввести многопоточность.
А смысл от этого? У вас что, задачи раскладываются на ядра процессора где-то?

Добавлено через 1 минуту
atm87, Лучше уж асинхронность сделать, и на время загрузки данных что-то показывать пользователю, типа погодите данные грузятся...
0
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 126
23.08.2024, 14:00  [ТС]
Добавил в код асинхронность, теперь таблица базы данных не заполняется...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
public class Computers
        {
            public string IPAddress { get; set; }
            public string PCName { get; set; }
            public string UserName { get; set; }
            public string MAC { get; set; }
            public string OS { get; set; }
        }
 
        private async void button1_Click(object sender, EventArgs e)
        {
            string connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\MyPCProject\\MyPCProject\\Database1.mdf;Integrated Security=True";
 
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                await connection.OpenAsync();
 
                var octets1 = ipAddressControl1.GetAddressBytes();
                var octets2 = ipAddressControl2.GetAddressBytes();
 
                if (octets1.Length >= 4 && octets2.Length >= 4 && octets1[0] == octets2[0] && octets1[1] == octets2[1] && octets1[2] == octets2[2])
                {
                    if (octets1[3] < octets2[3])
                    {
                        string baseIpAddress = $"{octets1[0]}.{octets1[1]}.{octets1[2]}.";
 
                        ClearTable(connection); // Clear table
 
                        List<Computers> computers = new List<Computers>();
 
                        for (int i = octets1[3]; i <= octets2[3]; i++)
                        {
                            string ipAddress = $"{baseIpAddress}{i}";
 
                            Computers computer = new Computers
                            {
                                IPAddress = ipAddress,
                                PCName = await GetInformationAsync(ipAddress, "Name", "Win32_ComputerSystem"),
                                UserName = await GetInformationAsync(ipAddress, "UserName", "Win32_ComputerSystem"),
                                MAC = await GetInformationAsync(ipAddress, "MACAddress", "Win32_NetworkAdapterConfiguration"),
                                OS = await GetInformationAsync(ipAddress, "Caption", "Win32_OperatingSystem")
                            };
 
                            try
                            {
                                computers.Add(computer);
                                // Добавьте обработку сообщений Windows в цикле
                                Application.DoEvents();
                            }
                            catch (Exception ex)
                            {
                                if (ex.HResult.Equals(0x800706BA))
                                {
#if DEBUG
                                    Debug.WriteLine($"Ошибка при добавлении компьютера с IP-адресом {ipAddress}: Сервер RPC недоступен.");
#else
                            // Тут, если нужно, выводить что-то пользователю в UI в режиме Release
#endif
                                    continue; // Продолжаем выполнение цикла
                                }
                            }
                        }
 
                        await InsertDataIntoDatabaseAsync(connection, computers);
                    }
                    else
                    {
                        MessageBox.Show("4-ый октет первого IP-адреса должен быть меньше 4-го октета второго IP-адреса.");
                    }
                }
                else
                {
                    MessageBox.Show("Первые три октета IP-адресов не совпадают.");
                }
 
                connection.Close();
            }
        }
 
        private async Task<string> GetInformationAsync(string ipAddress, string property, string queryClass)
        {
            string information = string.Empty;
 
            try
            {
                ManagementScope scope = new ManagementScope($"\\\\{ipAddress}\\root\\cimv2");
                await Task.Run(() => scope.Connect());
 
                ObjectQuery query = new ObjectQuery($"SELECT {property} FROM {queryClass}");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    information = queryObj[property] as string;
                    if (!string.IsNullOrEmpty(information))
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Извлечение ошибки {property} для IP адреса {ipAddress}: {ex.Message}");
            }
 
            return information;
        }
 
        private async Task InsertDataIntoDatabaseAsync(SqlConnection connection, List<Computers> computers)
        {
            string query = "INSERT INTO [Table] (ip_address, computer_name, username, mac_address, os, os_bitness) VALUES (@IPAddress, @ComputerName, @UserName, @MacAddress, @OS, @OSBitness)";
 
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Parameters.AddWithValue("@IPAddress", "");
                command.Parameters.AddWithValue("@ComputerName", "");
                command.Parameters.AddWithValue("@UserName", "");
                command.Parameters.AddWithValue("@MacAddress", "");
                command.Parameters.AddWithValue("@OS", "");
                command.Parameters.AddWithValue("@OSBitness", Environment.Is64BitOperatingSystem ? "64-bit" : "32-bit");
 
                foreach (var computer in computers)
                {
                    command.Parameters["@IPAddress"].Value = computer.IPAddress;
                    command.Parameters["@ComputerName"].Value = string.IsNullOrEmpty(computer.PCName) ? "Недоступен" : computer.PCName;
                    command.Parameters["@UserName"].Value = string.IsNullOrEmpty(computer.UserName) ? "Неизвестно" : computer.UserName;
                    command.Parameters["@MacAddress"].Value = string.IsNullOrEmpty(computer.MAC) ? "Неизвестен" : computer.MAC;
                    command.Parameters["@OS"].Value = string.IsNullOrEmpty(computer.OS) ? "Неизвестна" : computer.OS;
 
                    try
                    {
                        await command.ExecuteNonQueryAsync();
                        Debug.WriteLine($"Имя компьютера с IP-адресом {computer.IPAddress}: {computer.PCName}, добавлено в базу данных.");
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"Ошибка при записи данных с IP-адресом {computer.IPAddress}: {ex.Message}");
                    }
                }
            }
        }
Добавлено через 28 минут
Извиняюсь. Все работает)

Добавлено через 53 минуты
Теперь в этой строке появляется ошибка "Сервер RPC недоступен". Да ёмаё...
C#
1
await Task.Run(() => scope.Connect());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2024, 14:00

Во время входа в SQL выдает ошибку "сервер не найден или недоступен"
Во время входа в SQL выдает такого ошибку. пожалуйста подскажите

Сервер RPC недоступен
есть 2 сайта. в первом - 3 контроллера (DC1, DC2, DC3). во втором - 1 контроллер дочернего домена (DC4). решили избавиться от дочернего...

Сервер RPC недоступен
Добрый день. Имеется сервер на Windows Server 2019 с тремя виртуальными машинами на Hyper V. Две ВМ на Windows Server 2008 , 3-я на...

Сервер RPC недоступен
Проблема стала возникать не так давно, стихийное проявление. при попытки подключения к терминальному серверу 1с выскакивает сообщение что...

Сервер RPC недоступен
Windows выдает ошибки. Сам не знаю в чем дело. Возможно система пострадала от вирусов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru