有没有办法增加azure网络应用的请求超时?
如果我在2分钟左右的时间内延迟请求,则请求失败,没有错误(返回空白页)或模糊的503响应。
public ActionResult Index()
{
System.Threading.Thread.Sleep(230000);
return View();
}
我需要运行一些长时间运行的请求(上传大型文件/大型pdf转换作业) - 有什么方法可以解决这个问题吗?我更愿意避免使用VM托管。我已经尝试将网络应用扩展到基本或标准计划,但它似乎没有任何区别。
答案 0 :(得分:10)
不,您无法增加Azure App Services的超时(它是230秒)。您可以移动到托管在VM上的云服务或IIS,您可以在其中控制这些设置。您还可以移动到客户端发出请求的异步模型,获取某种票证或标识符,可以轮询以查看处理是否已完成。您可以选择Web应用程序的异步类型模型的许多示例。 价:https://social.msdn.microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7-2a82fb40135f/time-out-after-230-seconds?forum=windowsazurewebsitespreview
答案 1 :(得分:4)
希望这会有所帮助https://azure.microsoft.com/en-us/blog/new-configurable-idle-timeout-for-azure-load-balancer/。但是我认为在执行一些繁重的工作时保持请求是个坏主意。 Imho,您可以更好地实施后台工作,并不时从客户端检查其状态。
答案 2 :(得分:1)
如果应该长时间运行,请尝试将您的操作设置为异步,以避免Web服务器出现死锁:
public async Task<ActionResult> Index()
{
await Task.Delay(230000);
return View();
}
您可以在控制器的代码中设置脚本超时:
HttpContext.Current.Server.ScriptTimeout = 300;
请注意,HttpContext是基于每个请求实例化的,因此它会在下一个请求时返回到默认值
答案 3 :(得分:1)
您可以使用自动化脚本部署Web应用,并将此行添加到“资源”下:
{
"name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
"value": 1800
},
其中值默认为230,但可以增加到1800。 您还可以在“应用程序设置”下添加一个名为WEBSITES_CONTAINER_START_TIME_LIMIT并具有所需秒数的新设置。
答案 4 :(得分:0)
您可以在此处使用我的技巧代码来绕过230秒的限制。总之,我们只是继续写空的html值“ \ r \ n”来响应,以使ALB知道我们正在返回数据,但实际上我们正在处理请求。
答案 5 :(得分:-4)
You have to some changes in web.config
<system.webServer>
<monitoring>
<triggers>
<statusCode>
<addstatusCode="500"subStatusCode="0"win32StatusCode="0"
count="10"timeInterval="00:00:30" />
</statusCode>
</triggers>
<actionsvalue="Recycle" />
</monitoring>
For more: