2013-02-15 3 views
4

настроить свой документ магазин следующим образом:RavenDB, программно проверить ли экземпляр сервера работает

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

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

ответ

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); 
+0

Это помогает, будет стараться и доложить. Спасибо. –

+0

Похоже, что мой объект AsyncDatabaseCOmmands имеет значение NULL? Вы делаете какую-либо другую инициализацию в хранилище документов, прежде чем дойти до этого момента? – tigerswithguitars

+0

Мы попробовали это и обнаружили, что он начал сбой после последнего обновления клиента RavenDB. [Это обсуждение] (https://groups.google.com/forum/#!topic/ravendb/-bU7OJXdG4Q) в группе Google пришли к выводу, что вы должны использовать синхронный вызов. –

Смежные вопросы