RavenDB,以编程方式检查Server实例是否正在运行

时间:2013-02-15 08:04:23

标签: c# ravendb ravendb-http

我按以下方式配置文档存储:

store = new DocumentStore { Url = serverUrl };
store.Initialize();

我想知道如何确保先前或后期初始化但在开启会话之前,无论客户端是否已连接到服务器。我没有启动服务器,我仍然可以初始化存储,不知道为什么或者它是否默认创建嵌入式数据库,如果它无法在指定的URL下找到服务器。知道如何检查客户端和服务器之间是否建立了连接?

1 个答案:

答案 0 :(得分:8)

初始化实际上不会打开连接。 RavenDB客户端根据需要打开和关闭连接。

它不会还原为嵌入式数据库。如果需要嵌入式数据库实例,则必须显式使用EmbeddableDocumentStore

如果您想检查服务器是否已启动,您可以执行某些操作并查看服务器是否出现故障。您可以做的最简单的事情可能是尝试获取RavenDB服务器的内部版本号。这可以使用documentStore.AsyncDatabaseCommands.GetBuildNumberAsync()完成。

以下是一些有助于使其更加轻松的扩展方法。把它们放在一个静态类中:

public static bool TryGetServerVersion(this IDocumentStore documentStore, out BuildNumber buildNumber, int timeoutMilliseconds = 5000)
{
    try
    {
        var task = documentStore.AsyncDatabaseCommands.GetBuildNumberAsync();
        var success = task.Wait(timeoutMilliseconds);
        buildNumber = task.Result;
        return success;
    }
    catch
    {
        buildNumber = null;
        return false;
    }
}

public static bool IsServerOnline(this IDocumentStore documentStore, int timeoutMilliseconds = 5000)
{
    BuildNumber buildNumber;
    return documentStore.TryGetServerVersion(out buildNumber, timeoutMilliseconds);
}

然后你可以像这样使用它们:

var online = documentStore.IsServerOnline();

或者像这样:

BuildNumber buildNumber;
var online = documentStore.TryGetServerVersion(out buildNumber);