2012-02-08 61 views
1

我已經使用異步HTTP WebRequest(C#)向本地RavenDB成功發出了啓動備份請求。我可以看到備份文件正在我指定的備份位置中創建。這很好。RavenDB備份:使用HTTP API檢查狀態[/ Raven/Backup/Status]失敗

啓動備份調用是異步的,所以我需要一些方法來確定備份過程何時完成。幸運的是RavenDB文檔狀態:「烏鴉/備份/狀態」:

您可以通過 查詢文件的關鍵檢查備份的狀態。當文檔中的IsRunning字段設置爲false時,備份完成。

RavenDB Documentation

有人可以請告訴我怎麼做這種檢查?

我已經嘗試發出另一個HTTP請求,但它總是返回一個狀態[400-錯誤的請求]。我很樂意實際使用這個文檔的代碼查詢數據庫,但我不知道「狀態文檔」的類型,所以不能調用任何通用的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; 
} 

回答

2

烏鴉/備份/狀態是文件,而不是一個終點,如果你只想搶在導線上的數據,使用:

GET docs/Raven/Backup/Status 

,它會工作。

但是,您也可以使用Raven.Backup.exe來執行此操作。

+0

謝謝。這工作得很好。這是uri中爲我所缺的'文檔​​'。僅供參考:我正在嘗試此操作,因爲我想通過http快速檢索備份,以便將此功能包含在我自己的管理界面中。我正在運行備份並壓縮成zip文件,然後下載。但是..然後,我通過Studio發現了導入/導出功能,並意識到這是做同樣的事情。有沒有一個API可以讓我生成一個raven.dump導出文件? – biofractal 2012-02-29 09:37:56