Я успешно отправил запрос 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;
}