6

我通过以下方式配置我的文档存储:

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

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

4

1 回答 1

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);
于 2013-02-15T18:46:19.277 回答