c# - The underlying connection 上的另一个线程已关闭。预期保持事件状态的连接已被服务器关闭

标签 c# rest

我已经看到很多关于这个主题的话题......但是谷歌上的解决方案对我不起作用。

我正在使用 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 并设置 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) 应用程序对话的情况下,我遇到了相同的异常。在我发现服务器在 recrusion-loop 中运行而没有抛出 stackoverflow 或任何日志之后。结果是服务器响应客户端断开连接。也许这可以帮助遇到此类错误的人。

关于c# - The underlying connection 上的另一个线程已关闭。预期保持事件状态的连接已被服务器关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649007/

相关文章:

javascript - 在Node.js中使用edge.js处理C#.NET事件以获取 Electron

c# - 字段的实际性能与属性

java - 带 Rest 的 Tomcat - HTTP 状态 500 - Servlet 执行抛出异常

node.js - MongoDb find() 返回大量不需要的字段

android - 我如何在 Android 上进行身份验证

c# - WCF:将 Nonce 添加到 UsernameToken

c# - 'private extern String PadHelper'的源代码在哪里

javascript - Woocommerce REST API : Add meta data to line-item and to the database

c# - LeanFT C# 自动化;单击 wpf 按钮控件抛出异常

python - 如何使用 Flask 处理 GET Query String