背景
我们的 API 允许用户上传大文件,例如 PDF、JPG 和 PNG。最近我们遇到了很多服务器空闲一段时间后超时的请求。我们的客户会经历 2 分钟的等待时间,然后收到 500 错误消息。
我们使用 Azure API 管理为客户提供文档和 API 访问权限。
客户端 -> API 管理 -> Web 应用
但是,在深入了解之后,很明显问题出在 API 管理和我们的 Web 应用程序之间,这是我们设置SSL 证书的地方。
问题
问题似乎是发送包含 SSL 证书的大型 POST 请求以“唤醒”API 使其陷入僵局。我也使用 application insight 调试了 API,但似乎任何操作都没有收到请求。
在使用全新的 Web API 项目和 Web 应用程序调试问题后,我将范围缩小到只有在以下情况下才会发生超时:
- 服务器配置为仅使用 HTTPS 和/或需要客户端证书。
- 在发送我的第一个请求之前,我让服务器等待 5-10 分钟。
- 我的第一个请求包含一个大文件,例如 2 MB 的 PDF 文件。
我设置了以下资源以调试问题。
网络 API
我创建了一个全新的项目,ASP.NET Web API,框架 4.6。我只添加了一个简单的文件 Controller 。
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace DebugCertificate.API.Controllers
{
public class FilesController : ApiController
{
public HttpResponseMessage Post()
{
// Success
return Request.CreateResponse(HttpStatusCode.OK, "Welcome to the POST files resource!");
}
public HttpResponseMessage Get()
{
// Success
return Request.CreateResponse(HttpStatusCode.OK, "Welcome to the GET files resource!");
}
}
}
网络应用
我设置了一个全新的 Azure Web 应用程序并使用以下设置对其进行了配置。
使用 Postman 重现问题的步骤:
- 等待 5-10 分钟。
- 向包含大文件(在本例中为 2 MB)的/api/files 资源发送 POST 请求。
- 超时发生在 120 秒后。
- 只要发送大的 POST 请求,就可以重复第 2 步。
请注意,我什至不必随此请求一起发送客户端证书,问题就会发生。
不会出现这个问题
- 当需要客户端证书和仅 HTTPS 时关闭。
- 当您首先发送 GET/api/files 请求并在 5-10 分钟内发送上述第 2 步中描述的相同 POST 请求时。
可能的线索
在 Azure 中诊断 Web 应用程序后,我发现了这些请求生成的错误。我用 Google 搜索了这个描述,但没有找到任何可以解决我的问题的信息。
我发现了一些听起来相似的东西,但这篇文章听起来像是在客户端和 API 管理之间,而不是我们设置 SSL 证书的地方。寻找绿色提示框。
How to secure APIs using client certificate authentication in API Management
我还发现这篇文章包含一些解决问题的方法,但是用额外的请求“启动”API 似乎有点麻烦。
HTTPS Client Certificate Request freezes when the Server is handling a large PUT/POST Request
问题
- 为什么会这样?
- 是否有任何不涉及“启动”API 的解决方法?也许是一个简单的 Web.config 设置?
如果需要更多信息,请立即联系我!
最佳答案
转到自定义域下的域,单击代理域名,然后勾选协商客户端证书选项。
如果您使用的是消费层,则启用请求客户端证书选项。
关于c# - 使用客户端证书时,大型 POST 请求会导致 Asp.Net Web API 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59945532/