Вот что я использую для загрузки файлов с нескольких серверов. Обратите внимание, что я установил предел того, сколько я хочу прочитать из потока ответов, потому что в случае, если я получаю файл, превышающий указанный размер, я не хочу читать все это. В моем приложении ни один URL не должен приводить к превышению размера файла; Вы можете опустить это ограничение или увеличить эту сумму по мере необходимости.
int MaxBytes = 8912; // set as needed for the max size file you expect to download
string uri = "http://your.url.here/";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Timeout = 5000; // milliseconds, adjust as needed
request.ReadWriteTimeout = 10000; // milliseconds, adjust as needed
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
// Process the stream
byte[] buf = new byte[1024];
string tempString = null;
StringBuilder sb = new StringBuilder();
int count = 0;
do
{
count = responseStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0 && sb.Length < MaxBytes);
responseStream.Close();
response.Close();
return sb.ToString();
}
}
Я не знаю, решит ли это проблему с зависаниями, но у меня это хорошо работает.