RavenDB のインポート/エクスポート ルーチンを作成して、完全なサーバー インスタンスをローカルで開発できるようにすることを検討していますが、リソースの制約により Web サイトに埋め込んで実行できます。サイトのロックダウンされたセクションで機能を管理して、ファイルからのバックアップと復元を可能にしたいと考えています。しかし、デバッグや開発の目的で、本番データ セットをローカル サーバー インスタンスに復元できるようにしたいと考えています。
この一環として、私は v2.5.2750 の ISmugglerApi インターフェイス、具体的には Raven.Database.Smuggler.DataDumper と Raven.Smuggler.SmugglerApi の実装を使用して調査してきました。
埋め込みインスタンスを使用して、問題なくバックアップと復元を行うことができます。サーバー インスタンスを問題なくバックアップし、このファイルを Embedded インスタンスにインポートできます。ただし、サーバー データベースへの復元で問題が発生します。
私が使用しているコードは次のとおりです。
復元コード:
SmugglerOptions smugglerOptions = new SmugglerOptions { BackupPath = Server.MapPath(ServerMapPath) };
switch (Context)
{
case Context.Embedded:
DataDumper dumper = new DataDumper(((EmbeddableDocumentStore)MvcApplication.Store).DocumentDatabase, smugglerOptions);
var embeddedImport = dumper.ImportData(smugglerOptions);
await embeddedImport;
break;
case Context.Server:
var connectionStringOptions = new RavenConnectionStringOptions
{
ApiKey = Configuration.ApiKey,
DefaultDatabase = Configuration.DefaultDatabase,
Url = Configuration.DefaultUrl
};
var smugglerApi = new SmugglerApi(smugglerOptions, connectionStringOptions);
var serverImport = smugglerApi.ImportData(smugglerOptions);
await serverImport;
break;
}
バックアップ コード:
SmugglerOptions smugglerOptions = new SmugglerOptions { BackupPath = Server.MapPath(ServerMapPath) };
switch (Context)
{
case Context.Embedded:
DataDumper dumper = new DataDumper(((EmbeddableDocumentStore)MvcApplication.Store).DocumentDatabase, smugglerOptions);
var embeddedExport = dumper.ExportData(null, smugglerOptions, false);
await embeddedExport;
break;
case Context.Server:
var connectionStringOptions = new RavenConnectionStringOptions
{
ApiKey = Configuration.ApiKey,
DefaultDatabase = Configuration.DefaultDatabase,
Url = Configuration.DefaultUrl
};
var smugglerApi = new SmugglerApi(smugglerOptions, connectionStringOptions);
var serverExport = smugglerApi.ExportData(null, smugglerOptions, false);
await serverExport;
break;
}
ServerMapPath は現在、App_Data フォルダーにあるファイルの名前の const 文字列です。
Configuration.* は、必要な設定のために web.config から値を読み取る単純な静的クラスです。
Context は、これが実行されている環境のタイプを指定する構成オプションです。
サーバー データベース構成への復元を実行すると、次のようになります。
リモート サーバーがエラーを返しました: (400) 不正な要求。
[WebException: リモート サーバーがエラーを返しました: (400) Bad Request.] System.Net.HttpWebRequest.GetResponse() +6592536
Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getResponse) in c:\Builds\RavenDB -Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:349[InvalidOperationException:
何をすべきか分からなかった
あなたの要求は、Raven が知っていることと一致しませんでした。申し訳ありません...
]
Raven.Client.Connection.HttpJsonRequest.HandleErrors(WebException e) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:513 Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getResponse) c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:355 Raven.Client.Connection.HttpJsonRequest.ReadResponseJson() c:\Builds\RavenDB-Stable\Raven.Client. Lightweight\Connection\HttpJsonRequest.cs:239 Raven.Client.Document.RemoteBulkInsertOperation.GetAuthToken() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\RemoteBulkInsertOperation.cs:151 Raven.Client.Document.d_b.MoveNext() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\RemoteBulkInsertOperation.cs:0 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification(Task task) +52
Raven.Client.Document.d _3.MoveNext() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\RemoteBulkInsertOperation.cs:100 System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess(タスク タスク) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク) +52 Raven.Client.Document.d__18.MoveNext() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\ Document\RemoteBulkInsertOperation.cs:281[AggregateException: 1 つ以上のエラーが発生しました。]
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク) +83
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(タスク タスク) +71 Raven.Smuggler.d_ 6.MoveNext() c:\Builds\RavenDB-Stable\Raven.Smuggler\SmugglerApi.cs:87
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク) +52 Raven .Abstractions.Smuggler.d _26.MoveNext() in c:\Builds\RavenDB-Stable\Raven.Abstractions\Smuggler\SmugglerApiBase.cs:322 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク) +52 System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21 SampleApplication.Controllers.d__15.MoveNext() in c:\Src\Random\RavenImportExport\SampleApplication\Controllers \HomeController.cs:105 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク) +93
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク) +52 lambda_method(Closure , Task ) +23
System.Threading.Tasks. TaskHelpersExtensions.ThrowIfFaulted(タスク タスク) +33 System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +68
System.Web.Mvc.Async.<>c_ DisplayClass34.b _33(IAsyncResult asyncResult) +16
System.Web.Mvc.Async.WrappedAsyncResult 1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 System.Web.Mvc.Async.AsyncInvocationWithFilters.b_ 3c() +50 システム.Web.Mvc.Async.<>c _DisplayClass45.b_ 3e() +225 System.Web.Mvc.Async.<>c _DisplayClass30.b_ 2f(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult 1. End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 System.Web.Mvc.Async.<>c _DisplayClass28.b_ 19() +26 System.Web.Mvc.Async.< >c _DisplayClass1e.b_1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase
1b(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult 1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.Controller.b1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase
_1d (IAsyncResult asyncResult、ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid 1.End() +54 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.b_ 15 (IAsyncResult asyncResult、コントローラー コントローラー) +12 System.Web.Mvc.Async.WrappedAsyncVoid 1.End() +54 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +291.CallEndDelegate(IAsyncResult asyncResult) +36
System.Web.Mvc.Async.WrappedAsyncResultBase1.CallEndDelegate(IAsyncResult asyncResult) +28
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.b _4(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc. Async.WrappedAsyncVoid 1.End() +54 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 結果) +9 System.Web. CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +1291.CallEndDelegate(IAsyncResult asyncResult) +36
System.Web.Mvc.Async.WrappedAsyncResultBase
私は何を間違っていますか?