HttpWebResponse время ожидания истекло
От: justas_ms  
Дата: 29.03.10 13:14
Оценка:
Добрый день,

Проблема такая:
Обращаюсь к сайту, логинюсь, читаю страницу.
Все проходит нормально.
Однако если ошибаюсь с паролем или логином, я делаю повторное соединение, и на 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 и deflate
            else 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 и всё будет хорошо
Re: webResponse.Dispose
От: BluntBlind  
Дата: 29.03.10 13:19
Оценка:
Есть подозрение, что нужно вызывать Dispose у webResponse.
Re[2]: HttpWebResponse время ожидания истекло
От: justas_ms  
Дата: 29.03.10 13:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>закрывайте все открываемые потоки явно или через using и всё будет хорошо


Я и так вроде это делаю
grep1.GetRequestStream().Close();
*******
SRead.Close(); // закрытие потока
//responseStream.Close();
webResponse.GetResponseStream().Close();

Может что-то еще?
Re[3]: HttpWebResponse время ожидания истекло
От: Аноним  
Дата: 29.03.10 13:44
Оценка:
Здравствуйте, justas_ms, Вы писали:

_>Может что-то еще?

вроде у вас не везде закрывается
Re[2]: webResponse.Dispose
От: justas_ms  
Дата: 29.03.10 13:47
Оценка:
Здравствуйте, BluntBlind, Вы писали:

BB>Есть подозрение, что нужно вызывать Dispose у webResponse.


Спасибо, но к сожалению не помогло.
Re[4]: HttpWebResponse время ожидания истекло
От: justas_ms  
Дата: 29.03.10 13:53
Оценка:
Здравствуйте, Аноним, Вы писали:

_>>Может что-то еще?

А>вроде у вас не везде закрывается

Что-то не найду. Можно, что называется "носом ткнуть"?
Re[5]: HttpWebResponse время ожидания истекло
От: Аноним  
Дата: 29.03.10 14:07
Оценка:
Здравствуйте, justas_ms, Вы писали:

_>>>Может что-то еще?

А>>вроде у вас не везде закрывается

_>Что-то не найду. Можно, что называется "носом ткнуть"?

думаю, что проблема в способе закрытия
попробуйте
grep1.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
..
grep1.GetRequestStream().Close();

заменить на
using(var stream = grep1.GetRequestStream())
{
  stream.Write(ByteArr, 0, ByteArr.Length);
...
}
Re[6]: HttpWebResponse время ожидания истекло
От: justas_ms  
Дата: 29.03.10 14:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, justas_ms, Вы писали:


_>>>>Может что-то еще?

А>>>вроде у вас не везде закрывается

_>>Что-то не найду. Можно, что называется "носом ткнуть"?

А>думаю, что проблема в способе закрытия
А>попробуйте
А>
А>grep1.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
А>..
А>grep1.GetRequestStream().Close(); 
А>

А>заменить на
А>
А>using(var stream = grep1.GetRequestStream())
А>{
А>  stream.Write(ByteArr, 0, ByteArr.Length);
А>...
А>}
А>



Спасибо большое за помощь.
Избавился от проблемы, закрывая все webResponse (не знаю правильно ли это). Помог намек на не закрытые потоки. Начал закрывать все .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.