Wir ersetzen eine "alte" Webanwendung (das ursprüngliche CodeCentral wurde vor über 10 Jahren geschrieben und läuft jetzt unter http://cc.embarcadero.com mit über 12,7 Millionen Angeboten), das einen dateibasierten Cache für die Bereitstellung von Downloads verwendet. Die Webanwendung verwaltet diesen Dateicache.Wie aktualisiere ich eine freigegebene Datei auf IIS und ASP.NET?
Das einzige komplizierte Bit bei der Verwendung dateibasierter Downloads ist das Aktualisieren einer Datei, die möglicherweise von einer anderen Version verwendet wird. Als ich die ursprüngliche Delphi-CGI-Version von CodeCentral geschrieben habe, erinnere ich mich vage daran, dass ich die vorhandene Datei umbenennen konnte, obwohl jemand sie heruntergeladen hat, die neue Datei mit dem richtigen Namen geschrieben und schließlich die alte Datei aufgeräumt hatte.
Allerdings kann ich wahnhaft sein, weil das nicht mit unserem aktuellen IIS 6 und ASP.NET 2.x oder 3.x-Code funktioniert. Also, was wir haben dies stattdessen ist getan, was ziemlich kludgy ist aber schließlich funktioniert:
public static void FileCreate(Stream AStream, string AFileName, int AWaitInterval)
{
DateTime until = DateTime.Now.AddSeconds(AWaitInterval);
bool written = false;
while (!written && (until > DateTime.Now))
{
try
{
using (FileStream fs = new FileStream(AFileName, FileMode.Create))
{
CopyStream(AStream, fs);
written = true;
}
}
catch (IOException)
{
Thread.Sleep(500);
}
}
}
Ich denke, wir sind etwas fehlt einfach und es muss einen besseren Weg geben, eine Datei zur Zeit zu ersetzen ist heruntergeladen über IIS und ASP.NET. Ist da?
Danke für die Nachfrage, Greg. Dies sind große Dateien, 500 MB oder mehr. Außerdem handelt es sich nicht um temporäre Dateien, sondern um Dateien, die manchmal aktualisiert werden müssen. Die meisten Dateien ändern sich nicht, aber wenn sie dies tun, müssen wir sicher sein, dass wir sie durch eine neue Version ersetzen können. Ihre Frage veranlasste mich, noch einmal darüber nachzudenken - vielleicht können wir einen Versionsstempel in die Datei einbetten und so lösen. –