来自 SocketException 的 Azure 函数代理内部服务器错误 500

Azure Function Proxy Internal Server Error 500 from SocketException

我有一个 Azure 函数,它使用代理并转发到另一个 azure 函数作为后端。有一个接受 GET 的 /api/ping 端点。当我向 ping 发送 HTTP-GET 时,我偶尔会收到 500 内部服务器错误,它在我只看到代理上的请求但看不到后端 code-executing 函数上的请求的地方出现故障。

我在 header 中添加了 header“Proxy-Trace-Enabled”表示“真”以跟踪结果。我的 D:\home\LogFiles\Application\Proxies\DetailedTrace 文件夹中有结果。在那里,失败请求的日志包含一个“后端”json object 以及以下内容

{
    "source": "forward-request",
    "timestamp": "2020-08-20T15:42:20.8272145Z",
    "elapsed": "00:00:00.0061051",
    "data": {
      "messages": [
        "Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted"
      ]
    }
  }

我相信这是 DotNet 上的 Azure Functions 1.0,但它是很久以前创建的。 为什么我的简单 Azure Function 代理给我内部服务器错误,这些错误没有转发到我的后端代码来执行?

Azure Function App Service 计划有与套接字连接相关的 TCP 连接阈值。该文档位于 blog I'll link here. 在使用 similar correlation between issues 的 TCP/Port Exhaustion 上有一个类似的问题。虽然报告的异常是不同的,但在我扩展其所在的应用服务时,错误在我的测试中消失了。

示例: 我有 2 个 Azure Functions,FunctionA 和 FunctionB。 FunctionA 是一个代理,在 App Service Plan P1 上没有后端执行。 FunctionB 是 non-correlated 函数,但在同一个应用服务计划 P1 上执行。

应用服务计划 P1 下的函数 A 在调用时出现内部 500 服务器错误问题。在 App Insights 中报告为 Faulted,并在后端日志中作为套接字异常进行跟踪。

我在应用服务计划 P3 上重新创建了 Azure 函数 FunctionA。 FunctionA 没有收到 500 个内部服务器错误。但是,它不需要 P3 付款计划的规模。所以我把它移回了P1。再次发生服务器错误。

FunctionB 与 FunctionA (P1) 使用相同的应用服务计划。 Azure 监控指标总计每分钟 4,200 个 SocketOutboundAll。我将 FunctionB 从 P1 移动(删除并重新创建)到 P3。我将 FunctionA 保留在 P1 上。 SocketOutboundAll 的错误已从 P1 上的 FunctionA 中消除。 P3 App Service Plan 上的功能也没有报告任何异常。