我为MongoDB使用C#驱动程序。我可以获取本地网络中所有MongoDB服务器的列表,例如MS SQL服务器的SqlDataSourceEnumerator吗?
谢谢。
答案 0 :(得分:2)
您可以执行的操作是查找所有活动的IPv4地址。你可以找到如何做到here (answered by Ken Fyrstenberg)
然后使用HttpClient object从您在端口27017上找到的所有IP获取响应 尝试 { //创建一个新的HttpClient对象。 HttpClient client = new 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
的更多信息答案 1 :(得分:1)
不,没有内置的方法来发现网络中的所有MongoDB服务器。虽然我看到有一个基本上是端口扫描的答案,但这在许多层面上存在缺陷。
SqlDataSourceEnumerator
类通过向本地网段发送广播包来工作。它非常高效,因为该段上的“所有”设备将接收数据包并具有响应选项。 我通常建议只集中存储一组活动的MongoDB服务器。