Я использую драйвер C# для MongoDB. Могу ли я получить список всех серверов MonogDB в моей локальной сети, например, с помощью SqlDataSourceEnumerator для серверов MS SQL?MongoDB. Список всех серверов
спасибо.
Я использую драйвер C# для MongoDB. Могу ли я получить список всех серверов MonogDB в моей локальной сети, например, с помощью SqlDataSourceEnumerator для серверов MS SQL?MongoDB. Список всех серверов
спасибо.
Нет, нет встроенного способа обнаружить все серверы MongoDB в сети. Хотя я вижу, что есть ответ, предложенный для портирования портов, это ошибочно на многих уровнях.
SqlDataSourceEnumerator
работает, отправив широковещательный пакет в сегмент локальной сети. Это чрезвычайно эффективно, поскольку «все» устройства в этом сегменте получат пакет и имеют возможность отвечать.Обычно я бы рекомендовал просто централизованно хранить список активных серверов MongoDB.
Что вы можете сделать, это найти все активные IPv4-адреса. Вы можете найти, как это сделать here (answered by Ken Fyrstenberg)
Затем используйте HttpClient object, чтобы получить ответ сформировать все IP-адреса, которые вы нашли, но на порту 27017 попробовать { // Создать объект HttpClient Новый. Клиент HttpClient = новый HttpClient();
HttpResponseMessage response = await client.GetAsync("http://localhost:27017/");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
// Above three lines can be replaced with new helper method in following line
// string body = await client.GetStringAsync(uri);
Console.WriteLine(responseBody); //HERE you can check for "MongoDB"
}
catch(HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ",e.Message);
}
Ответ будет следующим образом (пример Mongod работает на конкретном IP):
Вы пытаетесь получить доступ к MongoDB на родном порту водителя. Для HTTP диагностики доступа, добавьте 1000 к номеру порта
Таким образом, используя строку ответа, вы можете выяснить, является ли экземпляр Mongod работает на конкретном IP или нет.
Это может не сработать, если настроен порт MongoDB (кроме значения по умолчанию: 27017). Для получения дополнительной информации о MongoDB's Network Exposure and Security
Я знаю, что SqlDataSourceEnumerator отправляет UDP-пакеты с использованием широковещательной передачи. Я спросил о любом способе (подобном этому классу по результату, но не по реализации), который мог бы мне помочь. Я понял, что никак ... –
Я дал вам ответ, почему нет надежного способа выполнить эту операцию. Я понимаю, чего вы хотите ... это просто непрактично делать эффективно или надежно. Я должен был задать вопрос, почему вы пытаетесь это сделать?Возможно, существует лучший подход, который не требует потенциально ненадежных методов. – WiredPrairie