2015-05-11 8 views
1

следующий код:операция несоответствие между .NET 3.0 и .NET 4.5 DownloadFileAsync

WebClient client = new WebClient(); 
client.DownloadProgressChanged += DownloadProgressChanged; 
client.DownloadFileCompleted += DownloadFileCompleted; 
client.DownloadFileAsync(new Uri(downloadUrl), downloadPath); 

отлично работает в .NET 4.5 - это загружает файл без каких-либо проблем, однако в .NET 3.0 или 3.5 он не work - файл показывает 0kb.

Кто-нибудь знает, почему это несоответствие? Мне интересно, есть ли дополнительные заголовки, отсутствующие в 3.0, включенные в 4.5?

Он также не вызывает никаких ошибок.

UPDATE:

В конце концов бросает "Операция истекло." исключение.

UPDATE # 2:

Я изменился с HTTPS на HTTP, и это, кажется, работает в моем конкретном случае. На самом деле мой HTTP-вызов перенаправил его на HTTPS. Однако, перейдя непосредственно на HTTPS, я не работал с .NET 3.0.

+2

Хорошо, это либо событие, которое было выпущено? Если да, то что происходит? –

+0

Jon, ни одно из событий не срабатывает (.NET 3.0). Небольшое обновление - я получил операцию, срок которой истекает. Я задержался немного дольше, чтобы исключение произошло. – Sash

+0

Если это HTTP, я предлагаю вам использовать Wireshark, чтобы узнать, что происходит в каждом случае. –

ответ

0

Таймаут по умолчанию может отличаться в зависимости от версии фреймворка. Это касается конфигураций привязки в файлах Web.config, поэтому я подозреваю, что это так и есть.

Я предлагаю создать производный класс WebClient и переопределить метод GetWebRequest задавать пользовательские тайм-аут, как предложено в этой теме: https://stackoverflow.com/a/3052637/2046539, который был вдохновлен этим блоге: http://w3ka.blogspot.be/2009/12/how-to-fix-webclient-timeout-issue.html

По общему правилу: никогда не доверяйте значения по умолчанию. Вы всегда должны использовать свои собственные значения. Большинство значений времени по умолчанию не документируются и являются деталями реализации.