我們要求我們的ASP.NET MVC網站通過遠程通知(數據庫值的更改)自動關閉。哪裏可以實現這個最好的地方?如何最好地實現'網站關閉'功能?
- 基本控制器類
- 的Global.asax
- 自定義屬性
- 其他
更新
很多建議使用app_offline但這種情況將發生的日常並將純粹由數據庫啓動,所以我會rath呃有應用程序主動,而不是外部推文件。
此外,我可能需要重定向用戶到一個持有頁面(最好是一個MVC控制器方法,以保持一切)。我更傾向於在我的BaseController中捕獲它,並處理它
我們要求我們的ASP.NET MVC網站通過遠程通知(數據庫值的更改)自動關閉。哪裏可以實現這個最好的地方?如何最好地實現'網站關閉'功能?
更新
很多建議使用app_offline但這種情況將發生的日常並將純粹由數據庫啓動,所以我會rath呃有應用程序主動,而不是外部推文件。
此外,我可能需要重定向用戶到一個持有頁面(最好是一個MVC控制器方法,以保持一切)。我更傾向於在我的BaseController中捕獲它,並處理它
我會自己回答這個問題,因爲我以不同的方式做了這些,但是要感謝大家的迴應。
我最終做的是在我的BaseController類(我的所有控制器派生自)中重寫OnActionExecuting()。
在這個方法中,我檢查數據庫(使用1分鐘的緩存),如果網站關閉,我加載一個視圖來顯示一個關閉的消息。如下圖所示
Protected Overrides Sub OnActionExecuting(ByVal filterContext As System.Web.Mvc.ActionExecutingContext)
MyBase.OnActionExecuting(filterContext)
Dim _cfgService = ObjectFactory.GetInstance(Of IConfigService)()
If _cfgService.DynamicConfig.WebSiteClosed Then
filterContext.Result = ErrorHandler(_cfgService.DynamicConfig.WebSiteClosedTitle, _
_cfgService.DynamicConfig.WebSiteClosedMessage)
End If
End Sub
如果必須以編程方式執行,我會使用Global.asax Application_BeginRequest。
你可以Response.Redirect頁面到「Offline.aspx」,它可以從數據庫或任何你需要的檢索消息。當然,你必須看看這個請求,看它是否試圖進入「Offline.aspx」,否則你最終會陷入無限循環。
或者,也許所有的應用程序可以重定向到一個網站,這將刪除大多數併發症。
關閉應用程序的請求直接來自數據庫,因此app_offline不是真正的選項。 Application_BeginRequest聽起來像個好主意,但我可能需要實際將用戶重定向到帶有消息的控制器頁面,所以我不確定我將如何處理該場景。 – James 2009-02-17 13:35:45
更新了我的答案,並提供了有關如何以編程方式執行的建議。 – 2009-02-17 13:56:14
有一種「優雅地」終止ASP.NET 2.0 webapp的標準方式 - 只需將App_Offline.htm
刪除到您的應用程序的根目錄即可。見this。
對不起,不知道ASP.NET,但萬一有幫助:
我們有一個APPLICATION.ASP頁面我們的網站(CMS /數據庫合併類型的東西);這可能是不常見的,所以因此可能限制有用,但也許可以用在所有的ASPX文件的頂部INCLUDE
我們重命名APPLICATION.ASP到TEST.ASP和複製HOLDING_PAGE.ASP到APPLICATION.ASP
實施HOLDING_PAGE.ASP存在於WWW文件夾中,因此時刻準備就緒。它包含一個「站點不可用」消息等,並且對於所有的CSS都是獨立的(不包括文件,沒有數據庫訪問)。公司標誌(顯然是該文件的外部標誌)是例外情況
此方法阻止對網站的所有訪問,不依賴於具有工作的數據庫連接,並且允許我們更改網站上的任何內容而不會干擾我們仍然可以使用TEST.ASP在內部訪問站點,因此我們可以在刪除持有頁面之前測試任何新的推出特性並把網站生活。如果您想阻止匿名使用TEST.ASP,則拒絕匿名權限。
刪除保留頁面是:刪除APPLICATION.ASP(即保留頁面)和重命名測試。ASP到APPLICATION.ASP
我們還有一個數據庫標誌,它會導致正常的APPLICATION.ASP頁面顯示一個持有頁面 - 我們可以在進行更小的更改時使用該頁面。
在Global.asax文件處理這種類型的行爲守則聽起來就像是最好的解決方案,並重定向到一個靜態的「ofline /關閉」頁。在Application_BeginRequest方法上處理請求,檢查看看該站點是否處於活動狀態,如果它讓它繼續,如果它不在線,則將請求重定向到靜態頁面。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string redirectURL = "~/Offline.aspx"; //some static page
bool isOnline = false; //SQL Call, config value
if (!isOnline && !string.IsNullOrEmpty(redirectURL))
{
Response.RedirectLocation = redirectURL;
Response.End();
}
}
「這種情況每天都會發生,並且純粹由數據庫發起」系統響應速度有多快?比方說,如果1分鐘就夠了,那麼你可以使用計劃任務來檢查數據庫標誌並創建/刪除app_offline文件? – Kristen 2009-02-17 14:06:10
或者你的正常應用程序邏輯的某些其他部分(即獲取其他數據庫數據,但經常執行某些操作)可以做到這一點。進行往返數據庫調用,比如每個頁面渲染僅用於檢查離線標誌可能對性能不利。 – Kristen 2009-02-17 14:08:21