当我尝试重定向到下一页时,我收到以下错误
注意: 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
答案 0 :(得分:6)
这篇MSDN帖子似乎描述了类似的情况。如果符合您的问题,请告诉我们:
引用:
[...] .Net在套接字的一个 senddata 中首先发送Expect 100,然后发送实际请求。服务器以Continue 100回复。正是在这里.Net显示消息“基础连接已关闭。连接意外关闭”。
.Net的印象是它无论如何已经发送了数据但是服务器发送了Connection:Close所以它显示错误而不重发(sic)请求。
所以对我有用的解决方案是
System.Net.ServicePointManager.Expect100Continue = False
如果您想查看闯入者之间的流量,请使用Wireshark或类似工具窥探HTTP交换。
答案 1 :(得分:6)
这可能是因为客户的超时时间超过了服务器的超时时间。服务器关闭连接,客户端仍在等待响应或发送请求。
您必须将KeepAlive属性设置为False,以便连接自行关闭并为每个请求重新打开。 这样可以避免尝试使用已关闭的连接。
答案 2 :(得分:2)
我配置了这个:
ServicePointManager.DefaultConnectionLimit = 100;
删除后,错误就消失了。
答案 3 :(得分:2)
使用RestSharp库时遇到了同样的问题。我在创建RestClient对象之前添加了这两行来解决这个问题:
ServicePointManager.DefaultConnectionLimit = 100;
ServicePointManager.MaxServicePointIdleTime = 5000;
答案 4 :(得分:1)
我在serviceBehaviors
元素
<serviceBehaviors>
<behavior name="ServiceBehaviour">
...
<dataContractSerializer maxItemsInObjectGraph="6553500"/>
...
</behavior>
</serviceBehaviors>
解决了这个问题。
跟踪有助于找到这些问题的根源:https://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx
答案 5 :(得分:0)
我们在对象图中有一个循环,我们正在返回。我知道这可能不是你的问题但是我在这里添加它以防其他人有同样的问题。我们已启用IncludeExceptionDetailInFaults
但未在任何客户端(我们的应用程序或WCF测试客户端)中收到错误。幸运的是它出现在服务器日志中,所以我们能够找到它。
我们有parent -> child
和child -> parent
用于双向导航,我们必须断开该链接,而不是parent -> child
,并且孩子有一个id来查找父级,然后是错误消失了。
希望这有助于某人!
答案 6 :(得分:0)
就我而言,问题出在文件长度中。请检查服务器上允许的文件大小。在您的脚本中,请检查此部分:
dataStream.Write(filesBytesArray, 0, filesBytesArray.Length);
dataStream.Close();
如果您不知道,只需在前端部分限制文件上传大小即。 HTML <input type="file">
上传元素,这是good reference for limiting file size and other filter。