自定义维护模式模块不适用于Azure Web角色

时间:2014-10-07 09:27:03

标签: iis azure azure-web-roles httpmodule

我创建并注册了自定义http模块,以便在管理员通过配置更改打开维护模式后向用户显示维护消息。

当我传递html请求时,它应返回从文件加载的自定义html,但它会返回消息:" 服务不可用。"我无法在整个解决方案中找到该字符串。来自自定义维护模块的自定义日志消息将写入log4net日志。

  

... INFO DdiPlusWeb.Common.MaintenanceResponder - 维护模式已启用。请求被拒绝。 RequestUrl = ...

似乎在Azure上的IIS中配置了错过的内容。有些东西拦截了我的503响应。怎么解决?

模块代码

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        if (AppConfig.Azure.IsMaintenance)
        {
            MaintenanceResponder responder = new MaintenanceResponder(context, MaintenaceHtmlFileName);
            responder.Respond();
        }
    }

响应者代码的有趣部分。

    private void SetMaintenanceResponse(string message = null)
    {
        _context.Response.Clear();
        _context.Response.StatusCode = 503;
        _context.Response.StatusDescription = "Maintenance";
        if (string.IsNullOrEmpty(message))
        {
            _context.Response.Write("503, Site is under maintenance. Please try again a bit later.");
        }
        else
        {
            _context.Response.Write(message);
        }
        _context.Response.Flush();
        _context.Response.End();
    }
编辑:我骗了。抱歉。维护模块为期望json或html的请求返回相同的消息。

1 个答案:

答案 0 :(得分:0)

This回答了我的解决方案。

我已经为SetMaintenanceResponse方法添加了另一行。

_context.Response.TrySkipIisCustomErrors = true;

现在有效。 Here更多的是它的确切含义。