RavenDB备份:使用HTTP API [/ Raven / Backup / Status]检查状态失败

时间:2012-02-08 16:43:25

标签: c# ravendb database-backups

我已使用异步HTTP WebRequest(C#)成功向本地RavenDB发出了启动 - 备份请求。我可以看到备份文件是在我指定的备份位置创建的。这很好。

Start-Backup调用是异步的,因此我需要一些方法来确定备份过程何时完成。幸运的是RavenDB文档声明:

  

您可以通过查询文档来检查备份的状态   关键:“乌鸦/备份/状态”。备份完成时   文档中的IsRunning字段设置为false。

RavenDB Documentation

有人可以告诉我怎么做这个检查吗?

我已尝试发出另一个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 个答案:

答案 0 :(得分:2)

Raven / Backup / Status是一个文档,而不是一个端点,如果您只想通过网络获取数据,请使用:

 GET docs/Raven/Backup/Status

它会起作用。

但您也可以使用Raven.Backup.exe来执行此操作。