Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebRequest stream.Read зависает, зависает stream.read в последней итераци 
:(
    Опции темы
Gleb
Дата 1.8.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 11.6.2005

Репутация: нет
Всего: 1



Всем привет.
Работаю с яндексом по http с помощью WebRequest и на коротких ответах на POST-запрос приложение зависает на минуту в последней итерации чтения из потока (там, где будет numberOfBytesRead = 0)
Все варианты перепробовал, надежда только на общественность.

При чтении результата в ответ на GET все хорошо, причем ответ такой же длины. Да что уж там, он идентичен.

Код

using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
                {
                    using (var documentStream = webResponse.GetResponseStream())
                    {
                        using (var ms = new MemoryStream())
                        {
                            var bytesToRead = new byte[buferSize];
                            var numberOfBytesRead = 0;
                            
                            do
                            {
                                numberOfBytesRead = documentStream.Read(bytesToRead, 0, buferSize);       //<--- зависает на последней итерации
                                ms.Write(bytesToRead, 0, numberOfBytesRead);
                            }
                            while (numberOfBytesRead > 0);

                            ms.Seek(0, SeekOrigin.Begin);
                            using (var sr = new StreamReader(ms, Encoding.UTF8))
                            {
                                var documentXmlString = sr.ReadToEnd();
                                sr.Close();
                                result = XDocument.Parse(documentXmlString);
                            }
                        }
                    }
                }


Вот так я создаю запрос:
Код

private HttpWebRequest CreateRequest(string url, HttpMethod method, AuthorizationOptions authorization, string content)
        {
            var result = (HttpWebRequest)HttpWebRequest.Create(url);
            result.Method = method.ToString();
            result.ContentType = "application/atom+xml; charset=utf-8; type=feed";
            result.KeepAlive = false;
            result.AllowWriteStreamBuffering = false;
            result.Proxy = GlobalProxySelection.GetEmptyWebProxy();

            if (method == HttpMethod.POST)
                result.ContentType = "application/atom+xml; charset=utf-8; type=entry";
            
            result.ServicePoint.Expect100Continue = false;

            if (authorization == AuthorizationOptions.Required)
                result.Headers.Add("Authorization", string.Format("FimpToken realm=\"fotki.yandex.ru\", token=\"{0}\"", _authorizationContext.Token));

            if (!string.IsNullOrEmpty(content))
            {
                var queryBytes = Encoding.UTF8.GetBytes(content);
                result.ContentLength = queryBytes.Length;
                result.GetRequestStream().Write(queryBytes, 0, queryBytes.Length);
            }

            return result;
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.