Saya mencoba mengunduh data klien ke mesin lokal saya (secara terprogram) dan server web mereka sangat, sangat lambat yang menyebabkan batas waktu pada WebClient
objek saya .
Ini kode saya:
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.UTF8;
webClient.DownloadFile(downloadUrl, downloadFile);
Apakah ada cara untuk menetapkan batas waktu tak terbatas pada objek ini? Atau jika tidak ada yang bisa membantu saya dengan contoh tentang cara alternatif untuk melakukan ini?
URL berfungsi dengan baik di browser - hanya membutuhkan waktu sekitar 3 menit untuk ditampilkan.
.TotalMilliseconds
dan tidak.Milliseconds
!Solusi pertama tidak bekerja untuk saya tetapi di sini ada beberapa kode yang berhasil bagi saya.
sumber
Anda perlu menggunakan
HttpWebRequest
daripadaWebClient
karena Anda tidak dapat mengaktifkan batas waktuWebClient
tanpa memperpanjangnya (meskipun menggunakanHttpWebRequest
). MenggunakanHttpWebRequest
malah akan memungkinkan Anda untuk mengatur batas waktu.sumber
"Do not use the HttpWebRequest constructor. Use the WebRequest.Create method to initialize new HttpWebRequest objects."
dari msdn.microsoft.com/en-us/library/… . Juga lihat stackoverflow.com/questions/400565/…Timeout
propertiHttpWebRequest
. Ini dalam milidetik.Tidak bisa mendapatkan kode w.Timeout bekerja ketika menarik keluar kabel jaringan, itu hanya tidak waktunya, pindah ke menggunakan HttpWebRequest dan melakukan pekerjaan sekarang.
sumber
var wresp = await request.GetResponseAsync();
alih-alih var,wresp = (HttpWebResponse)request.GetResponse();
Anda akan mendapatkan batas waktu besar lagiUntuk kelengkapan, inilah solusi kisp yang diport ke VB (tidak dapat menambahkan kode ke komentar)
sumber
Seperti kata Sohnee, menggunakan
System.Net.HttpWebRequest
dan mengaturTimeout
properti alih-alih menggunakanSystem.Net.WebClient
.Namun Anda tidak dapat menetapkan nilai batas waktu tak terbatas (tidak didukung dan mencoba melakukannya akan melempar
ArgumentOutOfRangeException
).Saya akan merekomendasikan terlebih dahulu melakukan permintaan HTTP HEAD dan memeriksa nilai
Content-Length
header yang dikembalikan untuk menentukan jumlah byte dalam file yang Anda unduh dan kemudian mengatur nilai batas waktu sesuai untukGET
permintaan berikutnya atau hanya menentukan nilai batas waktu yang sangat lama yang Anda inginkan. jangan pernah berharap melebihi.sumber
sumber
Bagi siapa pun yang membutuhkan WebClient dengan batas waktu yang berfungsi untuk metode tugas / sinkronisasi , solusi yang disarankan tidak akan berfungsi. Inilah yang berhasil:
Saya menulis blog tentang penyelesaian penuh di sini
sumber
Pemakaian:
Kelas:
Tetapi saya merekomendasikan solusi yang lebih modern:
Ini akan melempar
OperationCanceledException
setelah batas waktu.sumber
Dalam beberapa kasus, perlu menambahkan agen pengguna ke tajuk:
Ini adalah solusi untuk kasus saya.
Kredit:
http://genjurosdojo.blogspot.com/2012/10/the-remote-server-returned-error-504.html
sumber