从Azure函数发出长时间运行的HTTP请求时HTTP超时

从Azure函数发出长时间运行的HTTP请求时HTTP超时,azure,azure-functions,azure-cloud-services,Azure,Azure Functions,Azure Cloud Services,我目前正在编写一个Azure函数应用程序,从HTML生成大型PDF。我有一个Azure服务总线队列,该队列通过网站推送到,然后由Azure功能处理队列消息(基本层应用程序服务计划) 为了生成PDF,我从Azure函数中向Azure云服务发出HTTP请求,该函数生成一个字节数组,我为该字节数组写入Azure Blob存储 有时HTTP请求可能需要30分钟。当我在超过4分30秒的时间内发出任何HTTP请求时,我从未得到响应。如果我的假设是正确的,那是因为云服务和Azure功能之间的连接超时 有没有人

我目前正在编写一个Azure函数应用程序,从HTML生成大型PDF。我有一个Azure服务总线队列,该队列通过网站推送到,然后由Azure功能处理队列消息(基本层应用程序服务计划)

为了生成PDF,我从Azure函数中向Azure云服务发出HTTP请求,该函数生成一个字节数组,我为该字节数组写入Azure Blob存储

有时HTTP请求可能需要30分钟。当我在超过4分30秒的时间内发出任何HTTP请求时,我从未得到响应。如果我的假设是正确的,那是因为云服务和Azure功能之间的连接超时


有没有人对使用此基础设施运行更长时间的HTTP请求有什么建议?

您可能遇到了云服务端的空闲超时。要解决此问题,请在InputEndpoint()上设置idleTimeoutInMinutes:



然而,这可能是错误的解决方案。您不应该设计一个30分钟内需要来自活动HTTP连接的响应的系统。可能导致连接失败的变量太多。您应该使用一个异步模型,在该模型中,您调用云服务来启动将返回jobid的作业,然后定期调用云服务来检查作业的状态。有关设计模式,请参阅。

您可能遇到了云服务端的空闲超时。要解决此问题,请在InputEndpoint()上设置idleTimeoutInMinutes:



然而,这可能是错误的解决方案。您不应该设计一个30分钟内需要来自活动HTTP连接的响应的系统。可能导致连接失败的变量太多。您应该使用一个异步模型,在该模型中,您调用云服务来启动将返回jobid的作业,然后定期调用云服务来检查作业的状态。有关设计模式,请参阅。

谢谢您的帮助。在这之后,我重新考虑了这个方法,并决定按照你的建议尝试使用Azure web作业。我们最初在HTTP上运行的原因是因为使用了第三方库,我们无法异步运行。在转换到web作业之后,我们能够摆脱网络请求,现在唯一的问题是,当我们生成PDF时,自定义字体不会加载。我将尝试将这些文件作为base64文件嵌入,这样我们就知道我们不会在Azure中遇到资源块。谢谢这篇kwill。在这之后,我重新考虑了这个方法,并决定按照你的建议尝试使用Azure web作业。我们最初在HTTP上运行的原因是因为使用了第三方库,我们无法异步运行。在转换到web作业之后,我们能够摆脱网络请求,现在唯一的问题是,当我们生成PDF时,自定义字体不会加载。我将尝试将它们作为base64文件嵌入,这样我们就知道在Azure中不会遇到资源块。
<Endpoints>
   <InputEndpoint name="Endpoint1" protocol="tcp" port="10100" idleTimeoutInMinutes="30" />
</Endpoints>