【问题标题】:connection that was expected to be kept alive was closed by the server in asp.net预期保持活动的连接被asp.net中的服务器关闭
【发布时间】:2012-12-27 09:19:16
【问题描述】:

当我尝试重定向到下一页时,我收到以下错误

注意: Even the connection is open and it is fine.

底层连接已关闭:预期保持活动状态的连接已被服务器关闭。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:System.Net.WebException:底层连​​接已关闭:预期保持活动状态的连接已被服务器关闭。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪

[WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.]
  Effrtpartsigndone.Page_Load(Object sender, EventArgs e) +8196
  System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
  System.Web.UI.Control.OnLoad(EventArgs e) +91
  System.Web.UI.Control.LoadRecursive() +74
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

版本信息:Microsoft .NET Framework 版本:4.0.30319;

ASP.NET 版本:4.0.30319.272

【问题讨论】:

  • 页面源码

标签: asp.net


【解决方案1】:

这篇 MSDN 帖子似乎描述了类似的情况。让我们知道它是否符合您的问题:

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/246ffc07-1cab-44b5-b529-f1135866ebca/

引用:

[...].Net 首先在一个 senddata 套接字中发送期望 100,然后发送实际请求。服务器以 Continue 100 响应。正是在这里 .Net 显示消息“基础连接已关闭。连接已意外关闭”。

.Net 的印象是它已经发送了数据但服务器发送了 Connection : Close 所以它显示错误而不重新发送(原文如此)请求。

所以对我有用的上述解决方案是

System.Net.ServicePointManager.Expect100Continue = False

如果您想查看闯入者之间的流量,请使用 Wireshark 或类似工具窥探 HTTP 交换。

【讨论】:

    【解决方案2】:

    这可能是因为客户端的超时时间大于服务器的超时时间。服务器关闭连接,客户端仍在等待响应或发送请求。

    您必须将 KeepAlive 属性设置为 False,以便连接将自行关闭并为每个请求重新打开。 这将避免尝试使用关闭连接的问题。

    【讨论】:

    【解决方案3】:

    我已经配置好了:

    ServicePointManager.DefaultConnectionLimit = 100;
    

    一旦我删除它,错误就消失了。

    【讨论】:

      【解决方案4】:

      我在使用 RestSharp 库时遇到了同样的问题。我通过在创建 RestClient 对象之前添加这两行来解决:

      ServicePointManager.DefaultConnectionLimit = 100;
      ServicePointManager.MaxServicePointIdleTime = 5000;
      

      【讨论】:

      • 我认为 ServicePointManager.MaxServicePointIdleTime 设置为 5000,巧合的是 same 默认空闲超时,因为 apache 使用的可能是这里真正的解决方案。
      【解决方案5】:

      我在serviceBehaviors 元素的服务器配置中遇到了同样的问题和设置

      <serviceBehaviors>
          <behavior name="ServiceBehaviour">
              ...
              <dataContractSerializer maxItemsInObjectGraph="6553500"/>
              ...
          </behavior>
      </serviceBehaviors>
      

      解决了这个问题。

      追踪有助于找到这些问题的根源:https://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx

      【讨论】:

        【解决方案6】:

        就我而言,问题在于文件长度。请检查您的服务器上允许的文件大小。在你的脚本中检查这部分:

        dataStream.Write(filesBytesArray, 0, filesBytesArray.Length);
        dataStream.Close();
        

        如果您不知道,只需在前端部分限制上传的文件大小,即。 HTML &lt;input type="file"&gt;上传元素,这是good reference for limiting file size and other filter

        【讨论】:

          【解决方案7】:

          我们在返回的对象图中有一个循环。我知道这可能不是你的问题,但我在这里添加它以防其他人有同样的问题。我们启用了IncludeExceptionDetailInFaults,但在任何客户端(我们的应用程序或 WCF 测试客户端)中都没有收到错误。幸运的是,它出现在服务器日志中,所以我们能够以这种方式找到它。

          我们有parent -&gt; childchild -&gt; parent 用于双向导航,我们不得不断开该链接并改为使用parent -&gt; child,并且孩子有一个ID 来查找父母,然后错误就消失了。

          希望这对某人有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-22
            • 2014-02-22
            • 2017-10-20
            • 2011-10-31
            相关资源
            最近更新 更多