扩展Asp.Net需要帮助

时间:2008-09-19 10:03:09

标签: asp.net

正如大多数人所知,如果我在asp.net应用程序的根目录中删除名为app_offline.htm的文件,则会使应用程序脱机as detailed here

你也会知道,虽然这很好,但是当IIS正在进行时,IIS实际上会返回404代码,而Microsoft不会对它做任何事情as mentioned here

现在,由于Asp.Net一般是如此可扩展,我认为不应该有一种方法来过度使用这个状态代码来返回503吗?问题是,我不知道从哪里开始寻求改变。

HELP!

4 个答案:

答案 0 :(得分:5)

app_offline.htm的处理在ASP.NET管道中是硬编码的,无法修改:请参阅CheckApplicationEnabled()中的HttpRuntime.cs,如果它出现非常不可配置的404错误申请被视为离线。

但是,creating your own HTTP module做类似的事情当然是微不足道的 - 在这种情况下,OnBeginRequest处理程序看起来如下所示(显示了HttpHandler的实现,但在HttpModule中的想法完全相同):< / p>

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("<html><h1>{0}</h1></html>", ctx.Response.Status))
        ctx.Response.End()
    End If
End Sub

当然,这只是一个起点:通过使返回的HTML更加友好,您可以向用户显示一个不错的“我们将会立即返回”页面。

答案 1 :(得分:1)

您可以尝试在web.config中关闭它。

<httpRuntime enable = "False"/>

答案 2 :(得分:1)

您可以通过编写自己的HTTP Handler(实现System.Web.IHttpHandler接口的.NET组件)来实现。

这里有一篇很好的入门文章: link text

答案 3 :(得分:0)

在原始问题的第一个链接中突出显示的app_offline.htm和httpRuntime enable =“False”的优点是不再加载应用程序的应用程序域,这可能是实质性站点更改所需的。对leppie的答案(仍然服务于404)的略微修改是将defaultRedirect添加到另一个网站,这将允许源站点处于关闭状态,然后目标站点将提供简单的503生成页面

web.config源站点

<httpRuntime enable="false" />
<customErrors mode="On" defaultRedirect="/maintainance.aspx"/>

在dest网站中维护.aspx

<%@Page Language="C#"%>
<% 
    Response.StatusCode = 503;
    Response.Write("App offline for maintainance"); 
%>