每當我在IIS上更新我的Web應用程序時,任何正在使用它的用戶都將看到該頁面無響應,並且在刷新瀏覽器之前它將不再工作。 (更新過程持續約30秒)如何檢測頁面何時更新到IIS
我想顯示一條通知,例如javascript警報,讓用戶知道該頁面正在被使用,請嘗試在30秒後刷新頁面,等
我試圖趕上Global.ascx中的例外,但在這種情況下沒有引發異常。
每當我在IIS上更新我的Web應用程序時,任何正在使用它的用戶都將看到該頁面無響應,並且在刷新瀏覽器之前它將不再工作。 (更新過程持續約30秒)如何檢測頁面何時更新到IIS
我想顯示一條通知,例如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至上午8:01」..
在每一頁加載,你檢查該表,並顯示任何消息一個顯眼的地方(如頂部)。
在推送更新之前,您添加警報,同時給予他們足夠的時間來結束他們正在做的任何事情。
推送完成後,清除警報表。
老實說,你的主要問題只是調度更新和與用戶溝通即將發生的事情之一。你想這樣做並不意外。也就是說,您可能會考慮啓用optimizeCompilations標誌,以嘗試加速網站在推送更新後首次啓動時的編譯時間。
問題似乎是服務器對瀏覽器的響應速度很慢。試圖在服務器上檢測到這一點並不會真的有幫助(爲什麼會更快)。您需要一些可以顯示「服務器響應速度慢」的javascript解決方案,請稍等片刻。 –
會發生什麼情況是Web服務器正在重新編譯您的應用程序,所以很顯然,應用程序本身無法運行服務器端代碼來處理它。 –
我不介意它必須是JavaScript還是代碼隱藏,只要它們是彈出式消息。請你一步一步告訴我如何做到這一點? –