关于Web代理的另一个问题。
这是我的代码:
IWebProxy Proxya = System.Net.WebRequest.GetSystemWebProxy();
Proxya.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(targetServer);
rqst.Proxy = Proxya;
rqst.Timeout = 5000;
try
{
rqst.GetResponse();
}
catch(WebException wex)
{
connectErrMsg = wex.Message;
proxyworks = false;
}
这段代码在第一次调用时会挂起两分钟。在这之后,在连续的通话中,它有时会起作用,但在其他情况下不起作用。它也从来没有碰到过拦网。
现在是奇怪的部分。如果我添加一个
MessageBox.Show(msg)
在
GetResponse()
每次都可以不挂电话。下面是一个例子:
try
{
// ========Here is where I make the call and get the response========
System.Windows.Forms.MessageBox.Show("Getting Response");
// ========This makes the whole thing work every time========
rqst.GetResponse();
}
catch(WebException wex)
{
connectErrMsg = wex.Message;
proxyworks = false;
}
我对它为什么这样做感到困惑。我不知道超时是否不工作(它是以毫秒为单位,而不是以秒为单位,所以应该在5秒后超时,对吗?或者发生了什么。最让人困惑的是,消息框调用使它可以在不挂起的情况下工作。
因此,对所发生的一切给予帮助和建议,我们将不胜感激。这些是那种让我完全失去理智的虫子。
编辑和更正:
好的,所以我一直在测试这个问题,当我尝试从我得到响应的URI下载数据时,问题就产生了。我正在使用getResponse()方法和WebRequest测试连接,但正在使用WebClient下载数据。代码如下:
public void LoadUpdateDataFromNet(string url, IWebProxy wProxy)
{
//Create web client
System.Net.WebClient webClnt = new System.Net.WebClient();
//set the proxy settings
webClnt.Proxy = wProxy;
webClnt.Credentials = wProxy.Credentials;
byte[] tempBytes;
//download the data and put it into a stream for reading
try
{
tempBytes = webClnt.DownloadData(url); // <--HERE IS WHERE IT HANGS
}
catch (WebException wex)
{
MessageBox.Show("NEW ERROR: " + wex.Message);
return;
}
//Code here that uses the downloaded data
}
webrequest和webclient都在访问同一个URL,该URL是指向XML文件的Web路径,而代理是在本文顶部的方法中创建的。我正在测试创建的iWebProxy是否对指定的路径和文件有效,然后下载该文件。
我在上面放的第一段代码和使用WebClient的这段代码是在不同的类中,并且在不同的时间被调用,但是在代码的第一位使用一个消息框仍然使整个过程运行良好,这让我很困惑。不知道这里发生了什么,也不知道为什么消息框和在Visual Studio中运行/调试会使程序正常运行。建议?