RavenDB, программно проверить, работает ли экземпляр Сервера

Я настраиваю свое хранилище документов следующим образом:

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

Мне нравится знать, как я могу убедиться перед или после инициализации, но перед открытием сеанса, подключен ли клиент к серверу. Я не запустил сервер и все еще мог инициализировать хранилище, не зная, зачем или создает ли он по умолчанию встроенную базу данных, если не может найти сервер по указанному URL. Любая идея, как проверить, что соединение установлено между клиентом и сервером?

1 ответ

Решение

Инициализация фактически не открывает соединение. Клиент 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);
Другие вопросы по тегам