"底层连接"上的另一个线程已关闭.服务器关闭了本应保持活动状态的连接



我看到了很多关于这个主题的线程。。。但谷歌上的解决方案对我不起作用。

我正在使用HttpWebRequest对象进行POST操作,当我试图发布大量数据时,我会得到一个错误

The underlying connection was closed. A connection that was expected to be kept alive was closed by the server

现在我在谷歌上搜索,发现了三种解决方案

  1. 将KeepAlive设置为False,并将ProtocolVersion设置为HttpVersion10

当我这样做时,没有错误。。。但不知怎么的,我摆出的数据没有到达服务器。(所以不知何故,它默默地失败了……没有任何错误)。

如果我删除KeepAlive=false和Set ProtocolVersion=HttpVersion10。然后我可以看到,对于小的请求,一切都很好。。。。但对于大型请求,我收到了关闭基础连接的错误。

  1. 我还发现有些人通过转移到HttpClient而不是HttpWebRequest来解决问题。。。但我认为它只适用于.NET 4.5,但我必须至少编译.NET 3.5的代码。

  2. 一些人通过解决了这个问题

    ServicePoint sp=ServicePointManager.FindServicePoint(request.RequestUri);sp.Expect100Continue=false;

再一次,这没有抛出任何错误。但数据没有提交。

因此,对我来说,这些解决方案并不奏效。你有什么想法吗?

这是我的代码

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(completeUrl);
request.CookieContainer = Utility.GetSSOCookie(completeUrl);
request.Method = httpMethod;
request.Timeout = int.MaxValue;
Stream reqStream = null;
string output = null;
try {
if (String.IsNullOrEmpty(input) == false) {
byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(
input
);
request.ContentLength = buffer.Length;
reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
}
using (WebResponse response = request.GetResponse()) {
using (StreamReader reader = new StreamReader(response.GetResponseStream())) {
output = reader.ReadToEnd();
}
}
}

此异常可能是拼写错误。

在一个场景中,c#httpclient与iis(v7)上的asp-mvc(v5)应用程序对话,我得到了同样的异常。过了一段时间,它发现服务器在没有抛出stackoverflow或任何日志的情况下以递归循环运行。结果是服务器对客户端的断开进行了响应。也许这可以帮助遇到这种错误的人。

最新更新