Еще один вопрос о веб-прокси.
Вот мой код:
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.
Теперь странная часть.Если я добавлю вызов 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-адресу, который является веб-путем к XML-файлу, а прокси-сервер является тем же, который создан в методе в верхней частиэта почта.Я тестирую, чтобы убедиться, что созданный IWebProxy действителен для указанного пути и файла, а затем загружает файл.
Первый фрагмент кода, который я поместил выше, и этот код с использованием WebClient находятся в отдельных классах и называютсяв разное время, тем не менее, использование окна сообщения в первом бите кода заставляет все работать нормально, что меня смущает.Не уверен, что все здесь происходит или почему окна сообщений и запуск / отладка в Visual Studio заставляют программу работать нормально.Предложения?