请求被中止:请求被取消。没有解决方案有效

Posted

技术标签:

【中文标题】请求被中止:请求被取消。没有解决方案有效【英文标题】:The request was aborted: The request was canceled. No solution works 【发布时间】:2014-02-04 09:34:02 【问题描述】:

我们的控制台应用程序每分钟向 Facebook 发出数百个 WebRequest(使用多个应用程序和数百个访问令牌)。现在,他们开始失败,标题中出现异常消息(“请求被中止:请求被取消”)。我们在互联网上搜索了几个小时,尝试了所有可能的解决方案,但没有任何帮助。

这些没有帮助:

webRequest.Timeout = 20000; //A request that didn't get respond within 20 seconds is unacceptable, and we would rather just retry.
webRequest.KeepAlive = false;
webRequest.ProtocolVersion = HttpVersion.Version10;
webRequest.ServicePoint.Expect100Continue = false;

有人有其他想法吗?

编辑:

ToString 的异常:System.Net.WebException:请求是 aborted:请求被取消。 ---> System.Net.WebException: 请求被取消 System.Net.ServicePointManager.FindServicePoint(Uri 地址,IWebProxy 代理,ProxyChain&链,HttpAbortDelegate& abortDelegate,Int32& abortState) 在 System.Net.HttpWebRequest.FindServicePoint(Boolean forceFind) 在 System.Net.HttpWebRequest.DoSubmitRequestProcessing(异常& 异常)在 System.Net.HttpWebRequest.SetResponse(Exception E) --- 内部异常堆栈跟踪结束 --- 在 System.Net.HttpWebRequest.GetResponse() 在 WebException 消息: 请求被中止:请求被取消。

edit2:我们还没有达到极限。我们知道当这种情况发生时, 问题不在于。我们已经做了两年了, 而这件事在整个过程中只发生过两次。每 AccessToken 我们每分钟只做 2-3 个请求,并且节流 在 Facebook 上是 600 个请求/访问令牌/IP。

edit3:我想为有这个或类似问题的人添加一个额外的提示:确保你处理了你的 RequestStream、你的 Response 和你的 ResponseStream 对象。

【问题讨论】:

错误信息告诉你什么?你做了什么来找出问题的原因? 每分钟向 Facebook 发送数百个请求?您可能因过度使用而被 Facebook 屏蔽。 Mike W -> 我们没有被屏蔽。 我没有在标题中看到错误信息。好的,这是模糊的。请发布 Exception.ToString() 返回的内容。它包含比这更多的信息。此外,使用 Fiddler 查看完整的 HTTP 请求。 dotnetframework.org/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/… 我可以看到抛出异常的位置。您是否尝试增加 HTTP 请求限制?默认值为每秒 2 次。 ServicePointManager.DefaultConnectionLimit = 1000; 【参考方案1】:

http://www.dotnetframework.org/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/Net/System/Net/ServicePointManager@cs/1305376/ServicePointManager@cs

我可以看到抛出异常的位置。您是否尝试增加 HTTP 请求限制?默认为每秒 2 次。

ServicePointManager.DefaultConnectionLimit = 1000;

【讨论】:

谢谢。我知道问题不在于 Facebook 的限制。 是的,Facebook 限制会导致不同的错误消息。可能是状态 500 + 一些消息。没有证据证明这一点。 限制达到导致此消息:“流式调用已超过每 600 秒 600 次调用的速率”(我们正在使用 FQL) 答案中的链接不再有效。 @Turbo 感谢您告诉我。这个问题似乎已经过时了。你还对此感兴趣吗?【参考方案2】:
 My Solve for Xamarin

   public async Task<string> GetMessageEx(HttpWebResponse response)
    
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponse);
        string result = await streamRead.ReadToEndAsync();
        await streamResponse.FlushAsync();
        return result;
    

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于请求被中止:请求被取消。没有解决方案有效的主要内容,如果未能解决你的问题,请参考以下文章

.NET 请求被中止:无法创建 SSL/TLS 安全通道

异常:“请求被中止:连接意外关闭”调用两个方法时相同的对象

C# 解决“请求被中止: 未能创建 SSL/TLS 安全通道”的问题

两种方式彻底解决请求被中止: 未能创建 SSL/TLS 安全通道

ASP.NET Web API + 长时间运行的操作取消

如何取消/中止 jQuery AJAX 请求?