SocketException中的Azure Function Proxy内部服务器错误500

问题描述

我有一个Azure函数,该函数使用代理并将其转发到另一个Azure函数作为后端。有一个/ api / ping端点接受GET。当我发送HTTP-GET到ping时,偶尔会收到一个500 Internal Server Error(内部服务器错误),它会在我仅在代理上看到请求但在后端代码执行功能上看不到该请求的地方出错。

我将标有“ true”的标头“ Proxy-Trace-Enabled”添加到标头以跟踪结果。我的结果在我的D:\ home \ LogFiles \ Application \ Proxies \ DetailedTrace文件夹中。在其中,失败请求的日志包含带有以下内容的“后端” json对象

{
    "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代理会给我内部服务器错误,而这些错误没有转发到我的后端代码来执行?

For reference on how to trace the requests

解决方法

Azure功能应用程序服务计划的TCP连接阈值与套接字连接相关。该文档位于blog I'll link here.中 关于使用similar correlation between issues的TCP /端口穷竭问题,存在类似的问题。虽然报告的异常有所不同,但在扩展正在运行的应用程序服务时,错误在我的测试中消失了。

示例: 我有2个Azure函数,FunctionA和FunctionB。 FunctionA是代理,在App Service Plan P1上没有后端执行。 FunctionB是不相关的功能,但在相同的App Service Plan P1上执行。

App Service Plan P1下的FunctionA在调用时出现“内部500服务器错误”问题。在App Insights中报告为“有故障”,并在后端日志中作为套接字异常进行跟踪。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...