Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 11:07   #1
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию Проблема с GetResponse

Написал функцию для сохранения картинок на локальный компьютер. Теперь при использовании часто сталкиваюсь со следующей проблемой. Функция просто зависает здесь myReq.GetResponse();
Ниже вы видите что я попытался установить таймаут - он конечно помогает оборвать зависание, но проблема в следующем:

1. файл так и не грузится (даже если увеличиваю таймаут, кстати тестирую на маленьких файла до 20Кб, которые в браузере вообще быстро подгружаются);

2. насколько я понимаю если грузить большие файлы, то даже при нормальной загрузке timeout будет принудительно обрывать их.

В общем как правильно выйти из данной ситуации? В чем может быть проблема (отмечу, что она проявляется как то незакономерно - на одних и тех же файлах иногда есть, иногда нет)? Как проверить на ходу завис ли GetResponse или просто сейчас еще загружает большой файл?

Может подскажете какой нибудь другой более правильный вариант реализации?

Код:
public static bool loadImageLocally(string fullPath, string saveto,int timeout = 1000)
        {
            byte[] bytes;
            try
            {
                HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(fullPath);
                myReq.Timeout = timeout;
                //myReq.KeepAlive = true;
                //myReq.ReadWriteTimeout = timeout;
                
                WebResponse myResp = myReq.GetResponse();

                Stream stream = myResp.GetResponseStream();
                //int i;
                using (BinaryReader br = new BinaryReader(stream))
                {
                    //i = (int)(stream.Length);
                    bytes = br.ReadBytes(500000);
                    br.Close();
                }
                myResp.Close();
                FileStream fs = new FileStream(saveto, FileMode.Create);
                BinaryWriter w = new BinaryWriter(fs);

                w.Write(bytes);

                fs.Close();
                w.Close();
            }
            catch
            {
                return false;
            }
            return true;

        }
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 10.02.2011, 23:06   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Попробуй вот такой код,писал что-то похожее,но на этом компьютере у меня нет исходников:
Код:
public void DownloadRemoteImageFile(string uri, string fileName)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    if ((response.StatusCode == HttpStatusCode.OK || 
        response.StatusCode == HttpStatusCode.Moved || 
        response.StatusCode == HttpStatusCode.Redirect) &&
        response.ContentType.StartsWith("image",StringComparison.OrdinalIgnoreCase))
    {

        
        using (Stream inputStream = response.GetResponseStream())
        using (Stream outputStream = File.OpenWrite(fileName))
        {
            byte[] buffer = new byte[256];
            int bytesRead;
            do
            {
                bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                outputStream.Write(buffer, 0, bytesRead);
            } while (bytesRead != 0);
        }
    }
}
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37