【问题标题】:API management service ClientConnectionFailure at forward-request转发请求时的 API 管理服务 ClientConnectionFailure
【发布时间】:2019-07-03 02:44:45
【问题描述】:

我有一个 Azure 函数使用 API 管理服务中公开的 HttpClient API 调用 Service Fabric API。但 API 管理服务日志显示 API 调用失败,问题 ID 为“ClientConnectionFailure at forward-request”。

在客户端,我收到带有错误消息的 System.Net.Sockets.SocketException “操作已取消。无法从传输连接读取数据:由于线程退出或应用程序请求,I/O 操作已中止。由于线程退出或应用程序请求,I/O 操作已中止。申请要求”

此失败的可能原因是什么?如何解决?不幸的是,我找不到足够的文档?

【问题讨论】:

  • 嗨。通过使用相同的有效负载和设置在 Postman 上运行来检查您的 API。首先检查直接链接,然后与 APIM 链接。比较此 API 所用的时间。
  • 看起来好像超时了。试试这个,docs.microsoft.com/en-us/azure/api-management/…
  • 从 APIM 的角度来看,客户端(调用 APIM 的那个)正在中断连接。
  • 实际上问题出在后端 API 上。后端 API 引发了未处理的 c# 应用程序异常,但我的期望是 API 管理网关将相同的异常转发给客户端,但 API 管理在转发请求和超时时引发了诸如 ClientConnectionFailure 等误导性异常。不知道为什么会出现这种行为?

标签: azure azure-api-management


【解决方案1】:

首先您必须了解,在 APIM 中,我们有客户端(可能是您的浏览器或任何其他工具)、将请求转发到后端的 APIM 代理以及托管您的应用程序的后端。

客户端连接失败的原因是客户端在收到来自APIM网关(代理)的响应或完整响应之前就断开了连接。

两个原因可能导致客户端断开连接

  1. APIM 网关响应时间长,原因是 APIM 网关负载过重或 APIM 实例指向的后端(代理)无法处理 APIM 网关转发的请求量(无法跟上apim 服务负载),因此客户端在等待响应或有时仍在发送请求时超时。

  2. 客户端在接收来自 APIM 代理的响应时出于任何原因断开连接。

您必须确定造成这种情况的原因,并基于此通过修复客户端或扩展 APIM 或后端来做出反应。

【讨论】:

    【解决方案2】:

    我有类似的问题。在我的情况下,销售人员是客户,我经常观察到这个错误。如果在呼叫后 5 秒内没有得到响应,销售人员将关闭连接。这会使 APIM 级别的请求失败,并观察到错误“ClientConnectionFailure at forward-request”。

    请检查您的客户等待响应的时间。如果 APIM 花费的时间比这更长,那也是同样的问题。

    为了解决这个问题,您需要增加客户端的等待时间或努力改善 APIM 的响应时间。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2022-01-27
      • 2013-11-14
      • 1970-01-01
      相关资源
      最近更新 更多