首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HttpWebRequest:请求已中止:请求已取消

HttpWebRequest:请求已中止:请求已取消
EN

Stack Overflow用户
提问于 2010-03-17 08:51:25
回答 4查看 73.5K关注 0票数 26

我一直致力于开发一种中间人应用程序,它使用HTTP post请求将文本上传到CMS后端,一系列日期(通常一次7个)。我正在使用HttpWebRequest来完成这项工作。对于第一个日期,它似乎工作得很好,但当它开始第二个日期时,我得到了System.Net.WebException:请求已中止:请求已取消。

我四处寻找,发现了以下几条重要线索:

http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/0d0afe40-c62a-4089-9d8b-fb4d206434dc

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项目,所以我对任何技巧都持开放态度,但我希望专注于首先解决这个问题。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2010-06-01 22:19:50

互联网上列出的常见解决方案似乎是将HttpWebRequest的KeepAlive属性设置为false。如果根本原因是连接在一段时间后实际上是自动关闭的,但预计会被重用,则这可以解决问题。然而,不断打开和关闭连接会影响性能。

当我遇到这个问题时,我使用的另一个可能的解决方案是扩展超时属性: WebRequest.ReadWriteTimeout、WebRequest.Timeout、RequestStream.WriteTimeout和RequestStream.ReadTimeout。请注意,这些是以毫秒为单位的,因此您可能希望超时设置为1000 * 60 * 10来表示10分钟(如果您认为您知道这意味着什么,则只需600000 )。您可以通过减小文件大小来测试这是否是更有可能导致问题的原因。

顺便说一句。您的代码不再出现在列出的网站上。如果它仍然是一个问题,你可能想把它包括在你的帖子的文本中。

票数 22
EN

Stack Overflow用户

发布于 2011-11-02 05:51:50

这是唯一对我有效的解决方案:

http://blogs.msdn.com/b/johan/archive/2006/11/15/are-you-getting-outofmemoryexceptions-when-uploading-large-files.aspx

下面这几行是关键:

代码语言:javascript
复制
    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(yourUri);
    wr.KeepAlive = false;
    wr.Timeout = System.Threading.Timeout.Infinite;
    wr.ProtocolVersion = HttpVersion.Version10;

还有这里:

代码语言:javascript
复制
wr.AllowWriteStreamBuffering = false;
票数 16
EN

Stack Overflow用户

发布于 2011-07-28 01:33:19

对我的应用程序做一个简短的总结:我有多达16个相同的线程同时处理HTTP请求。这些线程中的每一个都请求来自不同的with服务器以及唯一的本地端点。现在,进行这些调用的函数有3个连续的HTTP请求要发出(到同一个the服务器)并进行一些聚合。

基于上面链接中发布的解决方案,以下组合适用于我。

代码语言:javascript
复制
System.Net.ServicePointManager.DefaultConnectionLimit = 200;
System.Net.ServicePointManager.MaxServicePointIdleTime = 2000;
System.Net.ServicePointManager.MaxServicePoints = 1000;
System.Net.ServicePointManager.SetTcpKeepAlive(false, 0, 0);

HttpWebRequest webRequest1 = (HttpWebRequest)WebRequest.Create("http://" + gatewayIP
 + "/xslt?");
webRequest1.KeepAlive = false;
webRequest1.Timeout = 2000;
//Do other stuff here...
//Close response stream

Thread.Sleep(1000); //This delay seems to help. Obviously very specific to the server

HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create("http://" + gatewayIP
 + "/xslt?");
webRequest2.KeepAlive = false;
webRequest2.Timeout = 2000;
//Do other stuff here...
//and so on...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2459241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档