Резервное копирование RavenDB: Сбой проверки статуса с помощью HTTP API [/ Raven / Backup / Status] - PullRequest
1 голос
/ 08 февраля 2012

Я успешно отправил запрос Start-Backup на локальную RavenDB, используя асинхронный HTTP WebRequest (C #).Я вижу, что файлы резервных копий создаются в указанном мной месте резервного копирования.Это хорошо.

Вызов Start-Backup асинхронный, поэтому мне нужен какой-то способ определить, когда процесс резервного копирования завершен.К счастью, состояние документации RavenDB:

Вы можете проверить состояние резервной копии, запросив документ с помощью ключа: «Raven / Backup / Status».Резервное копирование завершается, когда для поля IsRunning в документе установлено значение false.

Документация RavenDB

Может кто-нибудь подсказать, как выполнить эту проверку?

Я пытался отправить другой HTTP-запрос, но он всегда возвращается со статусом [400-Bad Request].Я был бы рад на самом деле запросить базу данных с использованием кода для этого документа, но я не знаю тип «документ состояния», поэтому не могу вызвать какой-либо универсальный метод db.Query <> () и, честно говоря, я не уверен, как запроситьиспользуя «ключ».

Вот код, который я использую до сих пор.

private void StartBackup(string backupLocation)
{
    var requestUri = new UriBuilder(Default.RavenUri){Path ="/admin/backup"};
    var formData = "{ 'BackupLocation': '" + backupLocation + "' }";
    var request = GetRequest(requestUri.Uri, formData);
    request.BeginGetResponse(asynchResult => CheckStatus(), null);

}

private void CheckStatus()
{
    var requestUri = new UriBuilder(Default.RavenUri){Path = "/Raven/Backup/Status"};
    var request = GetRequest(requestUri.Uri);
    var response = request.GetResponse();

}

private WebRequest GetRequest(Uri uri, string formData = null)
{
    var request = WebRequest.Create(uri);
    request.UseDefaultCredentials = true;
    request.PreAuthenticate = true;
    request.Credentials = CredentialCache.DefaultCredentials;

    if (formData == null)
    {
        request.Method = "GET";
        request.ContentLength = 0;
        return request;

    }

    request.Method = "POST";
    var data = Encoding.UTF8.GetBytes(formData);
    request.ContentLength = data.Length;
    request.ContentType = "application/x-www-form-urlencoded";
    using (var dataStream = request.GetRequestStream())
    {
        dataStream.Write(data, 0, data.Length);
    }
    return request;
}

1 Ответ

2 голосов
/ 09 февраля 2012

Raven / Backup / Status - это документ , а не конечная точка. Если вы хотите просто захватить данные по проводам, используйте:

 GET docs/Raven/Backup/Status

И это будет работать.

Но вы также можете просто использовать Raven.Backup.exe для этого.

...