0
バックアップを作成するためのコードは、LinuxおよびWindowsのASP .NET MVC2アプリケーションです。完了したら、ログファイルにエントリを書き込む必要があります。このコードはプロセス終了イベントに書き込みます。MVCコントローラでの検出の検出方法
終了イベント書き込みが早すぎます:データがクライアントに送信されない可能性があります。すべてのデータが送信された場合にイベントログに書き込む方法は?ストリームにClosedイベントがありません。
public class BackupController : ControllerBase
{
[AcceptVerbs(HttpVerbs.Get)]
public FileStreamResult Backup()
{
var process = new Process();
process.StartInfo.FileName = "c:\\Program Files\\PostgreSql\\9.1\\bin\\pg_dump.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.Exited += (sender, e) =>
{
TempData["ExitCode"] = process.ExitCode;
// todo: how to write this if all data is sent:
Writelog("Backup has completed");
};
Server.ScriptTimeout = 1 * 60 * 60;
process.Start();
return new FileStreamResult(process.StandardOutput.BaseStream, "application/backup");
}
}
をウィンドウでこれを使用すると、pg_dumpは終了したことがないと出るイベントは発生しません。デッドロックが発生したようです。これを修正するには? – Andrus
それはちょうど時間がかかりますか? –
いいえ、私は8 cpusで7の高速ローカルホストをテストしましたが、データベースは小さいです。私の元のコードを使って数秒間終了します。元のコードにStdErrorリダイレクトを追加すると、シミックの問題が発生します。私はこの質問をhttp://stackoverflow.com/questions/9863753/how-to-capture-stderr-of-pg-dump-invoked-from-asp-net-mvc2-controllerに掲載しました。 – Andrus