Приложение зависает на GetRequestStream() после первого запроса ⇐ C#
-
Гость
Приложение зависает на GetRequestStream() после первого запроса
Я погуглил и поискал здесь. Некоторые предполагают, что потоки не были близкими, другие полагают, что это ограничение количества подключений, когда для ServicePointManager.DefaultConnectionLimit установлено значение 1. Однако ничего из этого, похоже, не работает.
Моя проблема в том, что когда я использую это впервые, оно работает:
с использованием (varstream = request.GetRequestStream()) { данные var = Encoding.UTF8.GetBytes(post.ToString()); поток.Запись(данные, 0, данные.Длина); } Когда я использую его второй раз, он зависает. Да, я удаляю свою трансляцию, да, я прерываю и закрываю свои ответы и запросы.
Вот весь мой сегмент кода:
публичная строка get_hash(строка strUsername, строка strPassword, строка strUniverse) { // Запрос ВАР вар запрос = (HttpWebRequest)WebRequest.Create("http://website.com/"); // Ответ VAR вар ответ = (HttpWebResponse) request.GetResponse (); // переменная cookie вар cookie = новый CookieContainer (); ServicePointManager.DefaultConnectionLimit = 100; запрос.Таймаут = 10; запрос = (HttpWebRequest)WebRequest.Create("http://website.com/main/login"); request.AutomaticDecompression = DecompressionMethods.GZip | Методы декомпрессии.Дефлате; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); request.Headers.Add("Accept-Language", "en-US,en,q=0.8"); request.Headers.Add("Cache-Control", "max-age=0"); request.ContentType = "application/x-www-form-urlencoded"; request.Host = "website.com"; request.Headers.Add("Происхождение", "http://website.com"); request.Referer = "http://website.com/"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/33.0.1750.117 Safari/537.36"; запрос.Метод = "POST"; request.CookieContainer = новый CookieContainer(); request.CookieContainer.Add(cookie.GetCookies(request.RequestUri)); // УСТАНОВКА ДАННЫХ ПОЧТЫ ЗДЕСЬ вар сообщение = HttpUtility.ParseQueryString(string.Empty); post.Add("uni", strUni); post.Add("логин", strUsername); post.Add("pass", strPassword); используя (var поток = request.GetRequestStream()) { данные var = Encoding.UTF8.GetBytes(post.ToString()); поток.Запись(данные, 0, данные.Длина); поток.Закрыть(); поток.Dispose(); } ответ = (HttpWebResponse)request.GetResponse(); строка strSSID = «Ошибка»; если (response.StatusCode == HttpStatusCode.OK) { данные вар = string.Empty; используя (var sReader = новый StreamReader(response.GetResponseStream())) { данные = sReader.ReadToEnd(); sReader.Закрыть(); sReader.Dispose(); } строка strSSIDurl = response.ResponseUri.ToString(); int intSSIDurlStart = strSSIDurl.IndexOf("PHPSESSID=") + 10; стрSSID = strSSIDurl.Substring(intSSIDurlStart); } запрос.Прервать(); ответ.Закрыть(); ответ.Dispose(); вернуть стрSSID; }
Я погуглил и поискал здесь. Некоторые предполагают, что потоки не были близкими, другие полагают, что это ограничение количества подключений, когда для ServicePointManager.DefaultConnectionLimit установлено значение 1. Однако ничего из этого, похоже, не работает.
Моя проблема в том, что когда я использую это впервые, оно работает:
с использованием (varstream = request.GetRequestStream()) { данные var = Encoding.UTF8.GetBytes(post.ToString()); поток.Запись(данные, 0, данные.Длина); } Когда я использую его второй раз, он зависает. Да, я удаляю свою трансляцию, да, я прерываю и закрываю свои ответы и запросы.
Вот весь мой сегмент кода:
публичная строка get_hash(строка strUsername, строка strPassword, строка strUniverse) { // Запрос ВАР вар запрос = (HttpWebRequest)WebRequest.Create("http://website.com/"); // Ответ VAR вар ответ = (HttpWebResponse) request.GetResponse (); // переменная cookie вар cookie = новый CookieContainer (); ServicePointManager.DefaultConnectionLimit = 100; запрос.Таймаут = 10; запрос = (HttpWebRequest)WebRequest.Create("http://website.com/main/login"); request.AutomaticDecompression = DecompressionMethods.GZip | Методы декомпрессии.Дефлате; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); request.Headers.Add("Accept-Language", "en-US,en,q=0.8"); request.Headers.Add("Cache-Control", "max-age=0"); request.ContentType = "application/x-www-form-urlencoded"; request.Host = "website.com"; request.Headers.Add("Происхождение", "http://website.com"); request.Referer = "http://website.com/"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/33.0.1750.117 Safari/537.36"; запрос.Метод = "POST"; request.CookieContainer = новый CookieContainer(); request.CookieContainer.Add(cookie.GetCookies(request.RequestUri)); // УСТАНОВКА ДАННЫХ ПОЧТЫ ЗДЕСЬ вар сообщение = HttpUtility.ParseQueryString(string.Empty); post.Add("uni", strUni); post.Add("логин", strUsername); post.Add("pass", strPassword); используя (var поток = request.GetRequestStream()) { данные var = Encoding.UTF8.GetBytes(post.ToString()); поток.Запись(данные, 0, данные.Длина); поток.Закрыть(); поток.Dispose(); } ответ = (HttpWebResponse)request.GetResponse(); строка strSSID = «Ошибка»; если (response.StatusCode == HttpStatusCode.OK) { данные вар = string.Empty; используя (var sReader = новый StreamReader(response.GetResponseStream())) { данные = sReader.ReadToEnd(); sReader.Закрыть(); sReader.Dispose(); } строка strSSIDurl = response.ResponseUri.ToString(); int intSSIDurlStart = strSSIDurl.IndexOf("PHPSESSID=") + 10; стрSSID = strSSIDurl.Substring(intSSIDurlStart); } запрос.Прервать(); ответ.Закрыть(); ответ.Dispose(); вернуть стрSSID; }
Мобильная версия