Проблема такая:
Обращаюсь к сайту, логинюсь, читаю страницу.
Все проходит нормально.
Однако если ошибаюсь с паролем или логином, я делаю повторное соединение, и на grep.GetResponse() подвисает. Спустя некоторое время выскакивает ошибка — Время ожидания операции истекло.
PS По запросы делаю по снифферам, так что они идентичны тем что идут из браузера.
Кто-что посоветует.
Заранее спасибо.
class Class_connect
{
public static string sCookies;
public string FirstConnect()
{
sCookies = "";
//ServicePointManager.Expect100Continue = false;
HttpWebRequest grep = (HttpWebRequest)WebRequest.Create("http:...");
//grep.Timeout = 3000;
HttpWebResponse webResponse = (HttpWebResponse)grep.GetResponse(); // ответif (!String.IsNullOrEmpty(webResponse.Headers["Set-Cookie"]))
{ sCookies = webResponse.Headers["Set-Cookie"]; }
int status = (int)webResponse.StatusCode;
if (status != 200)
return ("Error");
return ("OK");
}
public string Autoriz(string Login,string Pass)
{
HttpWebRequest grep1 = (HttpWebRequest)WebRequest.Create("http:.../login/");
grep1.Method = "POST";
grep1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7)"; // добавление в заголовок "источника" запроса
grep1.Headers.Add("Keep-Alive", "115");
grep1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
grep1.Headers.Add("Accept-Language", "ru,en-us;q=0.7,en;q=0.3");
grep1.Headers.Add("Accept-Encoding", "gzip,deflate");
grep1.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
grep1.ContentType = "application/x-www-form-urlencoded";
// grep1.Timeout = 3000;if (!String.IsNullOrEmpty(sCookies))
{
grep1.Headers.Add(HttpRequestHeader.Cookie, sCookies);
}
grep1.AllowAutoRedirect = false;
string sQueryString = "login="+Login+"&pass="+Pass+"signin=%D0%BE%D0%%D0...";
byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
grep1.ContentLength = ByteArr.Length;
grep1.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
HttpWebResponse webResponse = (HttpWebResponse)grep1.GetResponse(); // ответint status = (int)webResponse.StatusCode;
grep1.GetRequestStream().Close();
if (status != 302)
return ("Проблемы с доступом к серверу");
return ("OK");
}
public string Connect()
{
// формируем запросstring serverUri = "http:.../pgn";
HttpWebRequest grep2 = (HttpWebRequest)WebRequest.Create(serverUri);
if (!String.IsNullOrEmpty(sCookies))
{
grep2.Headers.Add(HttpRequestHeader.Cookie, sCookies);
}
HttpWebResponse webResponse = (HttpWebResponse)grep2.GetResponse();
int status = (int)webResponse.StatusCode;
string rUri = webResponse.ResponseUri.AbsoluteUri;
if (rUri != serverUri)
return ("302");
if (status!=200)
return("Error");
Stream responseStream = webResponse.GetResponseStream(); // создание потокаif (webResponse.ContentEncoding.ToLower().Contains("gzip"))
responseStream = new GZipStream(responseStream, CompressionMode.Decompress); // дешифровка из gzip и deflateelse if (webResponse.ContentEncoding.ToLower().Contains("deflate"))
responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
StreamReader SRead = new StreamReader(responseStream, Encoding.UTF8); // чтение из потока з декодировкойstring otvet = SRead.ReadToEnd();
SRead.Close(); // закрытие потока
//responseStream.Close();
webResponse.GetResponseStream().Close();
return (otvet);
}
}
Re: HttpWebResponse время ожидания истекло
От:
Аноним
Дата:
29.03.10 13:16
Оценка:
Здравствуйте, justas_ms, Вы писали:
_>Однако если ошибаюсь с паролем или логином, я делаю повторное соединение, и на grep.GetResponse() подвисает. Спустя некоторое время выскакивает ошибка — Время ожидания операции истекло.
закрывайте все открываемые потоки явно или через using и всё будет хорошо
Здравствуйте, Аноним, Вы писали:
А>закрывайте все открываемые потоки явно или через using и всё будет хорошо
Я и так вроде это делаю
grep1.GetRequestStream().Close();
*******
SRead.Close(); // закрытие потока
//responseStream.Close();
webResponse.GetResponseStream().Close();
Может что-то еще?
Re[3]: HttpWebResponse время ожидания истекло
От:
Аноним
Дата:
29.03.10 13:44
Оценка:
Здравствуйте, justas_ms, Вы писали:
_>Может что-то еще?
вроде у вас не везде закрывается
Здравствуйте, Аноним, Вы писали:
_>>Может что-то еще? А>вроде у вас не везде закрывается
Что-то не найду. Можно, что называется "носом ткнуть"?
Re[5]: HttpWebResponse время ожидания истекло
От:
Аноним
Дата:
29.03.10 14:07
Оценка:
Здравствуйте, justas_ms, Вы писали:
_>>>Может что-то еще? А>>вроде у вас не везде закрывается
_>Что-то не найду. Можно, что называется "носом ткнуть"?
думаю, что проблема в способе закрытия
попробуйте
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, justas_ms, Вы писали:
_>>>>Может что-то еще? А>>>вроде у вас не везде закрывается
_>>Что-то не найду. Можно, что называется "носом ткнуть"? А>думаю, что проблема в способе закрытия А>попробуйте А>
Спасибо большое за помощь.
Избавился от проблемы, закрывая все webResponse (не знаю правильно ли это). Помог намек на не закрытые потоки. Начал закрывать все .