MongoDB Driver 2.0 C#有没有办法找出服务器是否已关闭?在新的驱动程序中,我们如何运行Ping命令?

时间:2015-06-08 15:43:59

标签: mongodb mongodb-.net-driver mongodb-csharp-2.0

如何使用新的C#驱动程序2.0调用Ping命令? 在旧驱动程序中,它可以通过Server.Ping()获得?另外,有没有办法在不运行实际查询的情况下查明服务器是否正在运行/响应? 使用mongoClient.Cluster.Description.State无济于事,因为即使在mongo服务器开始响应后它仍然处于断开状态。

3 个答案:

答案 0 :(得分:3)

您可以使用其Description属性检查群集的状态:

var state = _client.Cluster.Description.State

如果您希望特定服务器退出该群集,则可以使用Servers属性:

var state = _client.Cluster.Description.Servers.Single().State;

答案 1 :(得分:1)

这对我来说都适用于c#driver 2和1

int main()
{
    char buffer[128];
    int i=0;
    printf("Please enter a digit or a string and then a newline\n");
    scanf("%s", buffer);

    // Checks until the end of string that all chars are digits
    while ((buffer[i] != '\0') && (isdigit(buffer[i]) != 0))
    {
        i++;
    }

    // If index of buffer doesn't point to the end of string, means that a non digit char was found
    if (buffer[i] != 0)
    {
         printf("You entered a string\n");
    }
    else
    {
         printf("You entered digits\n");
    }

    return 0;
}

答案 2 :(得分:0)

作为@ i3arnon的回答,我可以用这种方式告诉我这是可靠的:

var server = client.Cluster.Description.Servers.FirstOrDefault();
var serverState = ServerState.Disconnected;
if (server != null) serverState = server.State;

或新版本的.Net

var serverState = client.Cluster.Description.Servers.FirstOrDefault()?.State 
    ?? ServerState.Disconnected;

但如果您真的想要运行ping命令,可以这样做:

var command = new CommandDocument("ping", 1);
try
{
    db.RunCommand<BsonDocument>(command);
}
catch (Exception ex)
{
    // ping failed
}