增加 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' 无效。 请在如果应该长时间运行,请尝试将您的操作设为异步以避免 Web 服务器上的死锁:
public async Task<ActionResult> Index()
await Task.Delay(230000);
return View();
您可以在控制器的代码中设置脚本超时:
HttpContext.Current.Server.ScriptTimeout = 300;
请注意,HttpContext 是在每个请求的基础上实例化的,因此它会在下一个请求时恢复为默认值
【讨论】:
不幸的是,这也不起作用public async Task<ActionResult> 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 应用请求超时的主要内容,如果未能解决你的问题,请参考以下文章