使用WebProxy的HttpWebRequests工作,然后在一段时间后失败

奇怪的情况我在这里,不幸的是我不了解很多关于netstat以外的东西的Windowsnetworking方面:

所以我有一个代理,我已经configuration在我的浏览器(Firefox 42),并运行一个简单的应用程序,通过URL循环通过该代理来调用它们。 这个代理有凭据才能使用它,我知道代理工程。 这是一个Windows 7的盒子。

所以在这个过程中的某个时候,会发生以下情况:

  1. 浏览器调用超时。 它根本不要求证书。 (当问题消失时,它又开始要求提供证书)。
  2. 无论超时是什么(7秒,20秒等),都会调用应用程序超时

我已经确认了以下内容:

  1. 在我的.net应用程序中,我100%知道我closures了每个networking对象,甚至在读取响应之后中止请求对象。
  2. 经过一段时间,没有任何电话,问题就消失了。
  3. 当我在另一台服务器上使用这个代理时,它100%的工作。 所以我知道它与我正在使用的服务器和那个代理IP地址有关。
  4. 我查看了资源pipe理器,并没有很多活动的TCP连接打开。 虽然我不知道这是否意味着什么。
  5. 如果我使用另一个代理,那么代理工作。 这就像它是特定于IP的,这让我感到困惑,因为它只是代码中的一个Web代理对象。

这会导致什么? 它通常发生在与代理4-7通话后,并在30-40分钟后发布问题。

编辑7:

AWS实例也会发生这种情况。 试过这种方法。 ZZZ …

编辑6:

服务器重启也不会消失。 您可以重新启动,15分钟后SAME代理超时。 最终再次工作。

编辑5:

用Java和Python写了一个类似的testing。 同样的结果。

编辑4:这是如何工作的:

Call to Proxy 1... Good! Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Good! Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Timeout... Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! Call to Proxy 1... Good! Call to Proxy 2... Good! Call to Proxy 3... Good! Call to Proxy 4... Good! 

编辑3:这些问题看起来非常相似: Http Post WebRequest获取超时

HttpWebRequest和GetResponse在1请求后挂起; 其他解决scheme不适合我

WebRequest.GetResponselocking?

HttpWebRequest超时第二个电话

编辑2:看着Wireshark,我看到在受影响的代理信息的TCP传输。 但是,其他代理在同一时间不会发生吗? 那么来自代理服务器本身呢? 这对我来说没有意义,因为我甚至没有得到回应,甚至没有处理请求。

编辑:添加代码调用代码。 这个方法在一个while循环中被重复调用:

  String html = null; HttpWebRequest request = null; WebProxy webProxy = null; try { request = (HttpWebRequest)WebRequest.Create(url); webProxy = new WebProxy(proxyIP, proxyPort); webProxy.Credentials = new NetworkCredential(proxyUser, proxyPass); request.Proxy = webProxy; request.KeepAlive = false; request.Timeout = 5000; request.ReadWriteTimeout = 5000; request.Method = "GET"; request.UserAgent = generateAgentString(); using (WebResponse resp = (WebResponse)request.GetResponse()) { using (Stream strm = resp.GetResponseStream()) { StreamReader reader = new StreamReader(strm, Encoding.UTF8); try { html = reader.ReadToEnd(); } catch { Console.WriteLine("Failed"); html = null; } finally { strm.Flush(); reader.BaseStream.Dispose(); reader.Dispose(); strm.Dispose(); resp.Dispose(); } } } if (request != null) { request.Abort(); } } catch(Exception e) { Console.WriteLine(e); } 

经过大量的挖掘,我又重新回到了代理商那里,提供了大量的跟踪信息和挖掘结果,奇迹般地…他们已经决定,他们确实有限制,他们没有透露给买方。

令人震惊的。 我更恼火了,在开始与他们讨论之后,我走了这么远,并得到一个干净的法案健康的结束。

如果任何人需要一个提供商的建议不要使用:)