有关Web代理的另一个问题。为什么HTTP网页请求和IWebProxy工作在怪异倍
这里是我的代码:
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;
}
该代码挂在第一次被调用一两分钟。之后,在连续的调用中,它有时会起作用,但不是其他的。它也不会碰到catch块。
现在怪异的一部分。如果我在GetResponse()
调用之前在代码的第一部分添加MessageBox.Show(msg)
调用,则这一切都将每次都工作,而不会挂起。这里是一个例子:
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秒后超时,对吧?)或者发生了什么。最令人困惑的是,消息框的调用使得所有的工作都没有挂起。
因此,任何帮助和建议对正在发生的事情表示赞赏。这些都是让我完全无法理解的错误。
编辑和修正:
OK,所以我一直在测试这一点,当我尝试从我收到从响应的URI数据下载问题引起的。我正在使用带WebRequest的GetResponse()方法测试连接,但是正在使用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的都是访问它是一个网络路径到XML文件相同的URL和代理是在这篇文章的顶部的方法创建的同一个。我正在测试以查看创建的IWebProxy是否对指定的路径和文件有效,然后下载文件。
我上面提到的第一段代码和使用WebClient的代码是在不同的类中,并且在不同的时间被调用,但是在代码的第一位使用消息框仍然会使整个事情运行良好,这会混淆我。不知道这里发生了什么,或者Visual Studio中的消息框和运行/调试为何使程序运行正常。建议?
如果没有抛出异常,那么“失败”是什么意思?当你用调试器完成它时会发生什么。 – 2010-06-07 23:31:42
代码失败=异常?死亡蓝屏?什么都没发生? – dtb 2010-06-07 23:33:10
你似乎没有对回应做任何事情。更多的代码会有帮助。 – 2010-06-07 23:38:12