我们正在更换一个“旧”web应用程序(最初的CodeCentral是在10年前编写的,现在运行在http://cc.embarcadero.com,服务超过1270万)使用基于文件的缓存服务下载。 Web应用程序管理这个文件缓存。如何更新IIS和ASP.NET上的共享文件?
使用基于文件的下载的唯一复杂的一点是更新可能被另一个版本使用的文件。当我编写CodeCentral的原始Delphi CGI版本时,我依稀记得能够重命名现有文件,即使有人可能正在下载它,使用正确的名称编写新文件,并最终清理旧文件。
但是,我可能会妄想,因为这不符合我们当前的IIS 6和ASP.NET 2.x或3.x代码。所以,我们做了什么,而不是是这样的,这是相当缺憾,但最终的作品:
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);
}
}
}
我想我们失去了一些东西简单,我们有了更好的方法来替换文件目前正在通过IIS和ASP.NET下载。在那儿?
感谢您的询问,Greg。这些是大文件,500MB或更多。此外,它们不是临时文件,而是有时需要更新的文件。大多数文件不会改变,但是当他们这样做时,我们需要确保我们可以用新版本替换它们。你的问题促使我再次思考 - 也许我们可以在文件中嵌入一个版本标记并以此方式解决问题。 – 2009-06-02 21:04:08