[英]How to detect when a page is being update to IIS
每当我在IIS上更新Web应用程序时,任何当前正在使用它的用户都将看到该页面无响应,并且只有刷新浏览器后,该页面才能再次运行。 (更新过程持续约30秒)
我想显示一个通知,例如javascript警报,以使用户知道该页面已被覆盖,请尝试在30秒后刷新页面,等等。
我试图在Global.ascx中捕获异常,但在这种情况下没有引发异常。
您可以在global.ascx中创建FileSystemWatcher
,然后在更新文件时冒泡(例如更新js)异常。 您可以从以下开始:
using System.IO;
namespace WebApplication1
{
public class Global : System.Web.HttpApplication
{
FileSystemWatcher watcher;
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
watcher = new FileSystemWatcher(this.Context.Server.MapPath("/"));
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
}
void watcher_Changed(object sender, FileSystemEventArgs e)
{
//set a value in js file
FileInfo jsFilesChanged = new FileInfo(Path.Combine(this.Context.Server.MapPath("/"), "scripts", "files_changed.js"));
using (StreamWriter jsWriter = (!jsFilesChanged.Exists) ? new StreamWriter(jsFilesChanged.Create()) : new StreamWriter(jsFilesChanged.FullName, false))
{
jsWriter.WriteLine("var changed_file = \"" + e.Name + "\";");
}
}
//.......
}
}
然后在客户端代码包括files_changed.js
并创建一个周期性的超时通话检查var changed_file
。 另外,请确保watcher
没有收集到垃圾。
一些参考: http : //msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
http://www.developerfusion.com/article/84362/extending-filesystemwatcher-to-aspnet/
考虑使用app_offline.htm 。 此页面将使客户端看到您的IIS应用程序已关闭。 完成更新后,只需删除页面即可。
大男孩如何做到这一点:
您需要一种在页面上发布警报的方法。 通常,这是通过在数据库中有一个用于这些警报的表来完成的。 基本上,您只是在其中存储一些文本,例如“嘿,该站点将在8:00 am至8:01 am之间关闭进行维护”。
在每次加载页面时,您都要检查该表并显示在明显位置(如顶部)找到的所有消息。
在推送更新之前,您需要添加警报,同时给他们足够的时间来总结他们所做的一切。
推送完成后,您清除警报表。
坦白说,您遇到的主要问题只是安排更新并与用户交流即将发生的事情之一。 您想要这样做并不奇怪。 也就是说,您可以考虑启用optimizeCompilations标志,以便在推送更新后首次点击时尝试加快网站的编译时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.