【发布时间】:2021-02-18 16:01:25
【问题描述】:
我有一个 Angular Web 应用程序,它由 C# Web Api 支持,它有助于与 Azure Function App 对话。
一个粗略的示例流程如下:
- Angular Web App(使用所选参数按下载)-> 向 API 管理服务发送 GET 请求
- API 管理服务调用 C# Web Api
- C# Web Api 然后响应 APIM,APIM 反过来调用 Azure Function App 以进一步处理 来自外部来源的数据
- 准备好 csv 后,将在打开 Web 应用的浏览器中下载数据负载
对于较大的有效负载,下载请求失败,Application Insights 中出现以下错误:
"ClientConnectionFailure at forward-request"
除非有效负载足够小,否则此错误每次恰好发生在 2 分钟。
这让我相信,在这种情况下,我理解为客户端的 Function App 正在超时并取消请求。
但是使用 Postman 通过 Azure Function App 的本地实例测试具有完全相同参数的 GET,有效负载被成功检索。
所以问题不在于 Azure Function App,因为它在 Postman 中没有像使用 WebApp 时那样超时。
这让我想到了三种不同的可能性:
- C# WebApi 超时并在 APIM 可以完全响应之前取消请求
- WebApp 本身正在超时。
- 互联网浏览器 (Chrome) 正在超时。 (Chrome 有 5 分钟的硬性不可更改超时,所以不太可能)
#1。为了解决第一个选项,我升级了在相关下载操作中创建的 HttpClient 的超时:
public aync Task<HttpResponseMessage> DownloadIt(blah)
{
HttpClient client = getHttpClient();
client.Timeout = TimeSpan.FromMilliseconds(Convert.ToDouble(600000)); // 10 minutes
var request = new HttpRequestMessage(HttpMethod.Get, buildQueryString(blah, client.BaseAddress));
return await client.SendAsync(request);
}
private HttpClient getHttpClient()
{
return _httpClientFactory.CreateClient("blah");
}
这没有影响,因为观察到了同样的错误。
#2。 protractor.conf.js 中有几个 Timeout 属性,例如 allScriptsTimeout 和 defaultTimeoutInterval。
增加这些没有效果。
** 最后一种可能性是 APIM 本身超时,但是查看相关 API 的 APIM 策略,没有 forward-request 属性,有超时,这意味着根据微软默认情况下,有APIM 没有超时。 https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies
我尝试了几种不同的策略,但都无济于事。
【问题讨论】:
标签: c# angularjs azure http azure-api-management