c#的HttpWebResponse 怎么老是报The underlying connection was closed

OopsJeff 2013-08-23 09:58:34
我是用循环来调用的.不是马上出现,出现的时间不定...奇怪了

string loginUrl = "http://192.168.1.101/DoServer.Class.php";
Encoding encoding = Encoding.GetEncoding("UTF-8");

HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, encoding, null);
//response.ti
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
String retValue = sr.ReadToEnd();

sr.Close();

return retValue;


System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.
at System.Net.HttpWebRequest.GetResponse()
at WindowsEE.HttpWebResponseUtility.CreatePostHttpResponse(String url, IDictionary`2 parameters, Nullable`1 timeout, String userAgent, Encoding requestEncoding, CookieCollection cookies)
at WindowsEE.MethodOption.common(IDictionary`2 parameters)
at WindowsEE.Main.timer2_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
...全文
5072 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2013-09-01
  • 打赏
  • 举报
回复
试下System.Net.ServicePointManager.Expect100Continue=false;
OopsJeff 2013-09-01
  • 打赏
  • 举报
回复
引用 15 楼 slyzly 的回复:
request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10;
试过了.不行
OopsJeff 2013-09-01
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
对于通讯程序来说,遇到异常是常有的事情。因此这通常用UI层捕获异常就行了,例如这个错误抛出给 System.Windows.Forms.Application.ThreadExceptionEventHandler 捕获,在界面上给用户一个友好提示,然后用户“知道了”之后程序就继续执行下去就好了。 而如果是静默的、轮询的任务,你自己捕获异常然后过一会儿重新开始任务就行了。 凡是涉及到互联网通讯的程序,都可能随时抛出异常。因此考虑到这个处理就行了。
我这是向php服务器请求的
事理 2013-09-01
  • 打赏
  • 举报
回复
request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10;
  • 打赏
  • 举报
回复
对于通讯程序来说,遇到异常是常有的事情。因此这通常用UI层捕获异常就行了,例如这个错误抛出给 System.Windows.Forms.Application.ThreadExceptionEventHandler 捕获,在界面上给用户一个友好提示,然后用户“知道了”之后程序就继续执行下去就好了。 而如果是静默的、轮询的任务,你自己捕获异常然后过一会儿重新开始任务就行了。 凡是涉及到互联网通讯的程序,都可能随时抛出异常。因此考虑到这个处理就行了。
  • 打赏
  • 举报
回复
你可以为Debug下的服务器端程序写个日志,每一个http请求处理过后服务程序是否执行到Response的输出流的Flush、Close语句,还是因为异常而崩溃了,都要记录在日志里。
  • 打赏
  • 举报
回复
引用 楼主 meiyoudao 的回复:
我是用循环来调用的.不是马上出现,出现的时间不定...奇怪了
服务器端的问题。检查它有没有缺少 Flush、Close语句并且确实执行到这里。有时候甚至是服务器端抛出了异常(可惜有些程序员写的程序隐藏了异常,使得无法调试)。
OopsJeff 2013-09-01
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
HttpWebResponseUtility对象在没有完成上次访问的时候,又进行下次操作,结果出错了。
这种问题如何防止呢?
OopsJeff 2013-08-31
  • 打赏
  • 举报
回复
引用 9 楼 wonderfuly 的回复:
不试试怎么知道对你的问题 有没有用?
一样的.还是这个错误
游戏人间 2013-08-30
  • 打赏
  • 举报
回复
不试试怎么知道对你的问题 有没有用?
OopsJeff 2013-08-29
  • 打赏
  • 举报
回复
引用 7 楼 wonderfuly 的回复:
= true
=true ??? 不是要长时间保持??? 这是服务器主动断开的吧,你保持不了的吧
游戏人间 2013-08-27
  • 打赏
  • 举报
回复
= true
游戏人间 2013-08-27
  • 打赏
  • 举报
回复
HttpWebRequest 设计成为 keepalive 看看
OopsJeff 2013-08-24
  • 打赏
  • 举报
回复
引用 2 楼 guwei4037 的回复:
我是用循环来调用的.不是马上出现,出现的时间不定...奇怪了 问题出在这,你为什么要循环调用呢?来不及反应,肯定挂了。类似于ddos攻击,服务器受不了,就停止服务了。
以新的线程来提交给服务器,这样不会卡死了吧?
OopsJeff 2013-08-24
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
HttpWebResponseUtility对象在没有完成上次访问的时候,又进行下次操作,结果出错了。
那如何来使用多线程方式发送post 也就是循环里面,判断当满足条件,就新建一个线程去提交数据,并且取得返回值. 有例子最好
人生导师 2013-08-23
  • 打赏
  • 举报
回复
你一直访问服务器,服务器会拒绝访问的,不能别人不是可以一直攻击服务器了,这样导致连接失败是正常的, 你可以把返回的数据保存起来
全栈极简 2013-08-23
  • 打赏
  • 举报
回复
我是用循环来调用的.不是马上出现,出现的时间不定...奇怪了 问题出在这,你为什么要循环调用呢?来不及反应,肯定挂了。类似于ddos攻击,服务器受不了,就停止服务了。
threenewbee 2013-08-23
  • 打赏
  • 举报
回复
HttpWebResponseUtility对象在没有完成上次访问的时候,又进行下次操作,结果出错了。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧