API 管理服务在转发请求时 ClientConnectionFailure

问题描述 投票:0回答:3

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

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

导致此失败的可能原因有哪些?如何修复它?不幸的是我找不到足够的文档?

azure azure-api-management
3个回答
9
投票

首先,你必须明白,在使用 APIM 时,有一个客户端,可以是你的浏览器、CURL 或任何其他工具,APIM 代理将请求转发到你的后端 API 和你的后端服务器。

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

如果出现以下情况,客户端可能会断开连接

  1. (1) APIM 网关负载过重,响应时间较长,(2) APIM 服务存在一些性能问题,(3) APIM 实例指向(代理)的后端无法处理 APIM 网关转发的请求数量(无法跟上 APIM 服务负载)或 (4) 因为后端通常很慢,因此客户端在等待响应时或有时仍在发送请求时超时。

  2. 客户端因任何其他原因断开连接(用户取消请求,例如客户端应用程序关闭、崩溃...等)

转发请求时的ClientConnectionFailure意味着当APIM网关将请求转发到后端或等待后端响应时,客户端断开了连接,请参阅此API中的传输响应和转发请求错误之间有什么区别管理?.

您必须确定导致此问题的原因,并根据该原因需要通过修复客户端或扩展 APIM 或后端来做出反应。


2
投票

我也有类似的问题。就我而言,销售人员就是客户,我经常观察到这个错误。如果销售人员在致电后 5 秒内未得到响应,则会关闭连接。这会导致 APIM 级别的请求失败,并观察到错误“ClientConnectionFailure atforward-request”。

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

为了满足这一点,您需要增加客户端的等待时间或努力改善 APIM 的响应时间。


0
投票

确保您在响应中返回状态代码。

示例:

return Ok();//200

或者

return BadRequest();//400

或者

return Problem();//500
© www.soinside.com 2019 - 2024. All rights reserved.