从C#到Apache的请求:基础连接已关闭:接收时发生意外错误
我有两台linux Apache服务器在负载平衡器后面运行。 在两台Apache服务器上,我安装了完全相同的YourlsAPI,用于缩短URL。我正在向YourlsAPI发送短URL请求 从C#生产站点向这些服务器发送请求,以缩短URL 几个月来,它一直运行良好,但在接到请求后,我突然收到了错误: 基础连接已关闭:上发生意外错误 接受 与此同时,一切都没有改变。Apache服务器没有任何安全限制之类的 此代码用于请求:从C#到Apache的请求:基础连接已关闭:接收时发生意外错误,c#,.net,apache,http,ubuntu,C#,.net,Apache,Http,Ubuntu,我有两台linux Apache服务器在负载平衡器后面运行。 在两台Apache服务器上,我安装了完全相同的YourlsAPI,用于缩短URL。我正在向YourlsAPI发送短URL请求 从C#生产站点向这些服务器发送请求,以缩短URL 几个月来,它一直运行良好,但在接到请求后,我突然收到了错误: 基础连接已关闭:上发生意外错误 接受 与此同时,一切都没有改变。Apache服务器没有任何安全限制之类的 此代码用于请求: public dynamic SendRequest(string acti
public dynamic SendRequest(string action, NameValueCollection parameters = null)
{
var client = new NoKeepAliveWebClient();
string jsonResult = string.Empty;
dynamic result;
//we need to form url with requests
var data = new NameValueCollection();
data["format"] = "json";
data["action"] = action;
data["signature"] = this.key;
if (parameters != null)
{
foreach (string key in parameters)
{
data[key] = parameters[key];
}
}
try
{
byte[] byteResult = client.UploadValues(url, data);
jsonResult = Encoding.UTF8.GetString(byteResult);
dynamic tempResult = JObject.Parse(jsonResult);
result = tempResult;
}
catch (Exception ex)
{
logger.Error("Error SendRequest (Action: {0}) Json: {1} {2}",
action,
jsonResult,
ex.Message + ex.StackTrace);
throw;
}
return result;
}
我并没有在所有请求中都得到这个错误,但我在大多数请求中都得到了这个错误
我对C#一无所知。我负责Apache服务器,在这些服务器上找不到任何可能阻止这些请求或导致此类错误的内容
所以我的问题是:
这可能是由Apache服务器引起的,还是特定于C#。或者它有负载平衡器
我想这个问题有点傻,但我需要尽快知道是哪一方造成了问题
编辑
通过在C端添加更多日志,我得到了详细的错误
ErrorType: WebException ErrorMessage: The underlying connection was closed: An unexpected error occurred on a receive.
InnerExceptionType: IOException InnerExceptionMessage: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
编辑
我得出结论,问题在于负载平衡器(hproxy)
我有一台安装了hproxy的服务器。Hproxy为两台应用服务器提供服务。当我通过hproxy发送请求时,我会收到这些错误
现在我停止使用hproxy,直接向one应用程序服务器调用请求,它现在工作正常,没有错误。但我需要它与hproxy一起工作
所以,你知道hproxy中的什么会导致这些错误吗。如果是HTTP,开始捕获网络数据包。是HTTP,我尝试了HTTP 1.1和1.0,但情况相同。由于我在我的服务器上收到很多请求,有什么建议可以用来捕获文件中的网络数据包吗?你熟悉网络数据包分析吗?如果是这样,您应该能够快速确定应该检查哪个连接,以及为什么关闭此连接(FIN或RST)。网络上的这种行为稍后可以用来检查哪一方(服务器、客户端或代理)是原因。我跟踪了http数据包,得出结论,两台apache服务器都没有问题。服务器上的所有http请求都得到了很好的处理。我得出结论,问题在于负载平衡器。我通过负载平衡器发送请求,并开始直接向一台服务器发送请求,它工作正常,没有错误。我正在使用hproxy进行负载平衡,这是在第三台服务器上设置的。因此,当我调用hproxy的请求时,我会收到这些错误。所以现在我找不到负载均衡器有什么问题,是什么导致了这些错误,有什么想法吗?当您确定负载均衡器是原因时,您是否也得到了它如何断开连接的错误模式?例如,它是否过早地关闭了连接?它是否在特定超时后重置连接?通过这些模式,您可以预测它的某些设置是否配置错误。