【问题标题】:Azure "500 - The request timed out" custom error pageAzure“500 - 请求超时”自定义错误页面
【发布时间】:2017-12-20 11:58:18
【问题描述】:

我们已将 ASP.NET MVC 应用程序部署到 Azure 应用服务。

如果请求花费的时间超过 230 秒,Azure 会返回错误页面“500 - 请求超时。Web 服务器未能在指定时间内响应。” - https://stackoverflow.com/a/38676086

我们正在进行更改以确保对 Web 请求的处理更少,但仍有可能达到这些限制。有谁知道是否有办法配置显示自定义错误页面而不是下面显示的通用错误页面?

【问题讨论】:

  • 如果你有可能达到 230 秒的限制,我可以假设你的应用肯定有问题......
  • 我们目前有一个长时间运行的数据库查询,正在对网络请求执行,我们正在移动它,但在此之前我们希望显示一个自定义错误页面。

标签: c# asp.net-mvc azure azure-web-app-service


【解决方案1】:

我们正在进行更改以确保对 Web 请求的处理更少,但仍有可能达到这些限制。有谁知道是否有办法配置自定义错误页面而不是下面显示的通用错误页面?

由于您无法克服 Azure 应用服务中关于请求超时(230 秒)的限制,您需要优化服务器端处理,或者您需要捕获异常并自定义响应。我尝试使用Application_Error event和自定义HTTP Modules捕获异常,但最终失败了。

对于解决方法,您可以为您的操作指定超时并在 Azure 应用服务引发超时异常之前在您的应用程序中捕获异常,然后您可以添加您的自定义错误页面。您可以利用AsyncTimeoutAttribute 并按如下方式定义您的操作:

[AsyncTimeout(duration:10000)] //The timeout value in milliseconds.
[HandleError(ExceptionType = typeof(TimeoutException),
                            View = "TimeoutError")]
public async Task<ActionResult> LongTask(CancellationToken cancellationToken)
{
    await Task.Delay(TimeSpan.FromSeconds(20), cancellationToken);
    return Content("Done");
}

注意: HandleErrorAttribute 需要在您的 Web.Config 中启用 customErrors。如果 TimeoutException 发生,那么您将被重定向到您定义的特定 MVC 视图。

【讨论】:

  • 谢谢,您的解决方案看起来不错,但需要对我们的应用程序进行一些更改,理想情况下,我们希望将 Azure 配置为显示静态 html 页面或在 230 秒时重定向到自定义错误页面超时,你知道在 Azure 中是否有任何配置?
  • 此外,如果您使用的是 Azure VM 或云服务,Azure 负载均衡器的空闲超时是可配置的,详细信息您可以关注here。对于 Azure Web 应用,您需要优化服务器端处理。
【解决方案2】:

本文应该对您有所帮助,请记住,自定义错误仅在请求到达网站时才有效。 http://benfoster.io/blog/aspnet-mvc-custom-error-pages

【讨论】:

  • 感谢您的回复,错误页面由 Azure 而不是我们的应用程序提供,因此这种方法不起作用。我们已经为应用程序配置了 customErrors。
猜你喜欢
  • 2017-03-23
  • 2015-08-26
  • 2015-11-18
  • 2016-11-23
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多