增加 azure web 应用请求超时

Posted

技术标签:

【中文标题】增加 azure web 应用请求超时【英文标题】:Increase azure web app request timeout 【发布时间】:2015-12-21 16:56:03 【问题描述】:

有没有办法增加 azure web 应用的请求超时?

如果我将请求延迟超过 2 分钟左右,则请求将失败且没有错误(返回空白页)或模糊 503 响应。

    public ActionResult Index()
    
        System.Threading.Thread.Sleep(230000);
        return View();
    

我有一些长时间运行的请求需要运行(上传大文件/大 pdf 转换作业) - 有什么办法可以解决这个问题吗?我宁愿避免使用虚拟机托管是可能的。我尝试将 Web 应用程序扩展到基本或标准计划,但似乎没有任何区别。

【问题讨论】:

你有没有想过这个问题?我有同样的问题。 不,最终不得不在虚拟机上托管 【参考方案1】:
az webapp config appsettings set --resource-group <you-resource-group-name> --name <your-app-name> --slot <your-slot-name> --settings WEBSITES_CONTAINER_START_TIME_LIMIT=1800

https://docs.microsoft.com/en-us/archive/blogs/waws/things-you-should-know-web-apps-and-linux

"如果您的容器启动时间较长,请增加启动时间限制。 适用于容器的 Web 应用 当我们启动您的容器时,我们将等待它启动和初始化。一旦容器运行并且我们收到对 ping 的响应,我们认为启动成功,以便我们知道它已准备好响应 HTTP 流量。我们将等待 230 秒以使其发生。如果我们在 230 秒内没有成功启动,我们会认为有问题,我们会停止容器。

我们意识到某些容器可能需要更多的时间才能启动,因此我们允许您将 230 秒的等待时间增加到 1800 秒的限制。要进行配置,请添加一个名为 WEBSITES_CONTAINER_START_TIME_LIMIT 的应用设置,并将其设置为您希望我们等待容器启动的秒数(最多 1800 秒),如下图所示。"

【讨论】:

【参考方案2】:

您可以在这里使用我的技巧代码来绕过 230 秒的限制。总而言之,我们只是一直写空的html值“\r\n”来响应让ALB知道我们正在返回数据,但实际上我们正在处理请求。

Sample code

【讨论】:

多么讨厌的把戏。讨厌我的意思是我把它留到以后。 我想你可以通过 TCP Keep-Alive 来达到同样的效果。 您的代码中似乎存在问题:未使用waitStep。 @quinvit 能否分享整个技巧代码【参考方案3】:

您可以使用自动化脚本部署网络应用,并在“资源”下添加这一行:

        
          "name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
          "value": 1800
        ,

默认值为 230,但可以增加到 1800。 您还可以在应用程序设置下添加一个名为 WEBSITES_CONTAINER_START_TIME_LIMIT 的新设置,并使用您想要的秒数。

【讨论】:

对我不起作用。这可能仅适用于 Linux 和作为属性,而不是资源? 我认为这是应用服务启动时间的限制,以避免重新启动容器。更多信息可以在这里找到docs.microsoft.com/en-us/azure/app-service/containers/…【参考方案4】:

不,您不能增加 Azure 应用服务的超时时间(它是 230 秒)。您可以迁移到托管在您可以控制这些设置的 VM 上的云服务或 IIS。您还可以移动到异步模型,在该模型中,客户端发出请求,获取某种票证或标识符,可以轮询返回以查看处理是否完成。有许多 Web 应用程序的异步类型模型示例可供您选择。 参考:https://social.msdn.microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7-2a82fb40135f/time-out-after-230-seconds?forum=windowsazurewebsitespreview

【讨论】:

Sanders 您能否为此提供指向 Microsoft 文档的链接?我正在尝试通过 Azure 应用服务上传文件的类似场景,从我看到的限制似乎是 5 分钟左右,而不是 2 分钟。 在线更新。 230 秒是默认值。 我做了一些测试,超时实际上是240秒(4分钟)。 根据我的经验,超时时间是 120 秒(2 分钟),在带有 docker 容器的 linux 应用服务上。 将超时值默认设置为 5 分钟的配置属性是什么? @JeffSanders-MSFT【参考方案5】:

您必须在 web.config 中进行一些更改

<system.webServer> 

<monitoring> 

<triggers>

<statusCode>

<addstatusCode="500"subStatusCode="0"win32StatusCode="0"

count="10"timeInterval="00:00:30" /> 

</statusCode>

</triggers>

<actionsvalue="Recycle" /> 

</monitoring> 

更多:

Connection Timeout (Timeout Expired) on Azure Web App Site

【讨论】:

那些似乎不是我的 web.config 文件的有效标签...元素 'system.webServer' 的子元素 'monitoring' 无效。 请在 之前使用 之后 请访问social.msdn.microsoft.com/Forums/azure/en-US/… 这不符合 OP 的要求。您的回答会回收应用程序池,这将取消正在进行的任何操作。这违背了目的。【参考方案6】:

如果应该长时间运行,请尝试将您的操作设为异步以避免 Web 服务器上的死锁:

public async Task<ActionResult> Index()

    await Task.Delay(230000);
    return View();

您可以在控制器的代码中设置脚本超时:

HttpContext.Current.Server.ScriptTimeout = 300;

请注意,HttpContext 是在每个请求的基础上实例化的,因此它会在下一个请求时恢复为默认值

【讨论】:

不幸的是,这也不起作用public async Task&lt;ActionResult&gt; Index() HttpContext.Server.ScriptTimeout = 100000; System.Threading.Thread.Sleep(400000); return View(); @woggles 您是否将此代码托管在任何我可以尝试的地方? 刚刚部署到webapplication45946.azurewebsites.net,它不会永远存在,但无论我在哪里部署网络应用程序,它都会失败 - 如果我将它托管在虚拟机上,我只能让它成功运行 【参考方案7】:

希望这会对https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/ 有所帮助。但我认为在执行一些繁重的工作时保留请求是个坏主意。恕我直言,您最好执行后台作业并不时从客户端检查它的状态。

【讨论】:

我已经阅读了该链接 - 其中是否适用于 azure Web 应用程序?我是否应该尝试为可能发生超时的特定操作配置 TCP Keep-Alive?

以上是关于增加 azure web 应用请求超时的主要内容,如果未能解决你的问题,请参考以下文章

Http 请求失败:在 Azure 逻辑应用中达到超时

应用加密后 Azure Blob 超时

Azure Blob 存储 .NET 客户端请求超时

解决Azure Web App 500内部服务器错误超时问题并对其进行故障排除

多个 HTTP 请求触发 HTTP Client 超时

Java:连接请求超时是啥意思?超时就不再请求了?