Код ниже используется для создания резервной копии приложения ASP .NET MVC2 в Linux и Windows. По завершении запись должна быть записана в файл журнала. Этот код записывает его в событие Exit процесса.
Запись события выхода слишком рано: данные могут не отправляться клиенту. Как записать в журнал событие, если все данные отправлены? Поток не имеет закрытого события.
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");
}
}