C# 使用WebProxy的HttpWebRequests工作,然后在一段时间后失败
我在这里遇到了奇怪的情况,不幸的是,我不太了解netstat之外的Windows网络方面的事情: 因此,我在浏览器(Firefox42)中配置了一个代理,并运行一个简单的应用程序,通过URL循环,通过该代理调用它们。该代理具有使用它的凭据,我知道该代理可以工作。这是一个Windows7的盒子 因此,在这个过程中的某个时刻,会发生以下情况:C# 使用WebProxy的HttpWebRequests工作,然后在一段时间后失败,c#,.net,windows,tcp,proxy,C#,.net,Windows,Tcp,Proxy,我在这里遇到了奇怪的情况,不幸的是,我不太了解netstat之外的Windows网络方面的事情: 因此,我在浏览器(Firefox42)中配置了一个代理,并运行一个简单的应用程序,通过URL循环,通过该代理调用它们。该代理具有使用它的凭据,我知道该代理可以工作。这是一个Windows7的盒子 因此,在这个过程中的某个时刻,会发生以下情况: 浏览器调用只是超时。它根本不要求提供凭证。(当问题消失时,它再次开始要求提供凭据) 调用应用程序超时,无论超时是什么(7秒、20秒等) 我已经证实了以下几点:
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:这些问题看起来非常相似:
编辑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); }
经过大量的挖掘-我再次回到代理提供商那里,带着一堆跟踪信息和挖掘结果,然后。。。奇迹般地他们已经决定,事实上他们确实有一些限制,他们没有向买方披露 令人震惊。我更恼火的是,在最初与他们讨论并得到了一张干净的账单和他们的健康之后,我走了这么远
如果有人需要建议提供商不要使用:)可能会发生很多事情。您的网络可能会发生冲突,或者交换机出现故障,因此数据包永远不会到达代理服务器,或者更确切地说,在到达您正在通话的主机的途中会出现任何问题。我想知道你得到的实际例外是什么。和内部异常(如果有)。其次,如果你能在wireshark中捕获一个失败的请求,它会告诉你发生了什么。那么忽略你的代码,当你设置你的实际浏览器使用这个代理时,它仍然偶尔超时?您是否正在为此代理编写代码,并试图确定它出现问题的原因?这听起来像是代理服务器中的代码没有正确管理网络资源的问题。是的-我已经在浏览器中设置了代理,既在代码正在运行的服务器上(这也会导致超时),也在网络之外的另一台服务器上(这会导致成功调用)。我怀疑这与网络或服务器本身有关,而不是与从另一台服务器运行的代理有关。如果代理服务器出现问题,两台服务器都应该看到它。有时,最简单的方法是尝试移动服务器、更换网络电缆等,同时尝试省去某件事情。先大干一场。使用全新的网络电缆将其移动到工作服务器旁边。如果这样做有效的话,那只是把它移回去,一次换一件东西,直到问题再次出现。如果您不确定问题出在服务器上。是否尝试设置DefaultConnectionLimit??