首页 > 解决方案 > 使用客户端证书时,大型 POST 请求会导致 Asp.Net Web API 超时

问题描述

背景

我们的 API 允许用户上传大文件,例如 PDF、JPG 和 PNG。最近,当服务器空闲一段时间时,我们遇到了大量请求超时。我们的客户将经历 2 分钟的等待时间,然后收到 500 错误消息。

我们使用 Azure API 管理为客户提供文档和对 API 的访问。

客户端 -> API 管理 -> Web 应用程序

但是,在查看洞察力之后,很明显问题出在 API 管理和我们的 Web 应用程序之间,我们在那里设置了SSL 证书

问题

问题似乎是发送包含 SSL 证书的大型 POST 请求以“唤醒”API 使其陷入僵局。我也使用应用程序洞察力调试了 API,但似乎任何操作都没有收到请求。

在使用全新的 Web API 项目和 Web 应用程序调试问题后,我将其缩小到仅在以下情况下才会发生超时:

我设置了以下资源来调试问题。

网络 API

我创建了一个全新的项目,ASP.NET Web API,框架 4.6。我只添加了一个简单的文件控制器。

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 App 并使用以下设置对其进行了配置。

配置 - 常规设置

TLS/SSL 设置 - 协议设置

使用 Postman 重现问题的步骤:

  1. 等待 5-10 分钟。
  2. 向包含大文件(本例中为 2 MB)的 /api/files 资源发送 POST 请求。
  3. 超时发生在 120 秒后。
  4. 只要你只发送大的 POST 请求,你就可以重复第 2 步。

请注意,我什至不必随此请求发送客户端证书即可发生问题。

邮递员请求

不会出现问题

可能的线索

在 Azure 中诊断 Web 应用程序后,我发现了这些请求生成的错误。我已经用谷歌搜索了这个描述,但没有找到任何可以解决我的问题的信息。

诊断和解决问题 - 诊断和解决问题 - HTTP 4xx 错误

我发现了一些听起来相似的东西,但这篇文章听起来像是在客户端和 API 管理之间,而不是我们设置 SSL 证书的地方。寻找绿色提示框。

如何在 API 管理中使用客户端证书身份验证保护 API

我还发现这篇文章包含一些解决问题的方法,但是用额外的请求“启动”API 似乎有点麻烦。

HTTPS 客户端证书请求在服务器处理大型 PUT/POST 请求时冻结

问题

  1. 为什么会这样?
  2. 是否有任何不涉及“启动”API 的解决方法?一个简单的 Web.config 设置可能吗?

如果需要更多信息,请让我现在!

标签: c#asp.netsslasp.net-web-apiazure-web-app-service

解决方案


转到自定义域下的域,单击代理域名,然后勾选协商客户端证书选项。

如果您使用的是消费层,则启用请求客户端证书选项。

https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-mutual-certificates-for-clients


推荐阅读