Eme*_*eka 22 c# httpwebrequest visual-studio-2008
我一直致力于开发一种中间人应用程序,它使用一系列日期的HTTP发布请求(通常一次只有7个)将文本上传到CMS后端.我正在使用HttpWebRequest来实现这一目标.它似乎在第一个日期工作正常,但是当它开始第二个日期时,我得到System.Net.WebException:请求被中止:请求被取消.
我四处搜寻,发现了以下重要线索:
http://www.jaxidian.org/update/2007/05/05/8
http://arnosoftwaredev.blogspot.com/2006/09/net-20-httpwebrequestkeepalive-and.html
他们并没有太多帮助.我已经尝试重载GetWebReuqest,但这没有意义,因为我没有使用该函数.
这是我的代码:http: //pastebin.org/115268
在成功运行至少一次后,我在第245行得到错误.
我很感激我能得到的任何帮助,因为这是我一直在努力的项目的最后一步.这是我的第一个C#/ VS项目,所以我对任何提示持开放态度,但我想专注于首先解决这个问题.
谢谢!
Reg*_*ser 21
Internet上列出的常见解决方案似乎是将HttpWebRequest的KeepAlive属性设置为false.如果根本原因是连接预期会被重用,即使它在一段时间后实际自动关闭,这也可以解决问题.但是,不断打开和关闭连接会对性能造成影响.
我遇到此问题时使用的另一个可能的解决方案是扩展Timeout属性:WebRequest.ReadWriteTimeout,WebRequest.Timeout,RequestStream.WriteTimeout和RequestStream.ReadTimeout.请注意这些是以毫秒为单位,因此您可能希望超时为1000*60*10代表10分钟(如果您认为您将知道这意味着什么,则只需600000).您可以通过减小文件大小来测试这是否是更可能导致问题的原因.
BTW.您的代码不再在列出的网站上.如果仍然存在问题,您可能希望将其包含在帖子的文本中.
Rou*_*oon 12
这是唯一适合我的解决方案:
这些线是关键:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(yourUri);
wr.KeepAlive = false;
wr.Timeout = System.Threading.Timeout.Infinite;
wr.ProtocolVersion = HttpVersion.Version10;
Run Code Online (Sandbox Code Playgroud)
和这里:
wr.AllowWriteStreamBuffering = false;
Run Code Online (Sandbox Code Playgroud)