正如你们大多数人都知道,如果我把一个在asp.net应用程序的根命名app_offline.htm文件,它将应用程序脱机这里详述.
你也会知道,虽然这很好,但是当它正在进行时,IIS实际上会返回一个404代码,并且微软不会像这里提到的那样对它做任何事情.
现在,由于Asp.Net一般是如此可扩展,我认为不应该有一种方法来过度使用这个状态代码来返回503吗?问题是,我不知道从哪里开始寻求改变.
救命!
app_offline.htm的处理是硬编码在ASP.NET管道,并不能修改:见CheckApplicationEnabled()
在HttpRuntime.cs
,这里如果应用程序被认为是离线的,它抛出一个非常不配置的404错误.
但是,创建自己的HTTP模块来做类似的事情当然是微不足道的 - 在这种情况下,OnBeginRequest处理程序看起来如下所示(显示的是HttpHandler的实现,但在HttpModule中的想法完全相同):
Public Sub ProcessRequest(ByVal ctx As System.Web.HttpContext) Implements IHttpHandler.ProcessRequest If IO.File.Exists(ctx.Server.MapPath("/app_unavailable.htm")) Then ctx.Response.Status = "503 Unavailable (in Maintenance Mode)" ctx.Response.Write(String.Format("{0}
", ctx.Response.Status)) ctx.Response.End() End If End Sub
当然,这只是一个起点:通过使返回的HTML更友好一点,您也可以向用户显示一个不错的"我们会马上回来"页面.