.NET裡面,WebClient并沒有什麼屬性或方法可以設定逾時時長,即TimeOut。這個逾時時長很重要,預設似乎是120秒,2分鐘,太長了。如果網路請求很多,每個都等2分鐘,似乎就會造成堵塞。最好設短一點。
這個WebClient怎麼設呢?從網絡上的文章套路來看,都是重載這個WebClient,然後用重載過的,就不再用WebClient了。
public class WebClientPro : WebClient
{
/// <summary>
/// 過期時間
/// </summary>
public int Timeout { get; set; }
public WebClientPro(int timeout = 30000)
{//預設30秒
Timeout = timeout;
}
/// <summary>
/// 重寫GetWebRequest,添加WebRequest對象逾時時間
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
protected override WebRequest GetWebRequest(Uri address)
{//WebClient裡上傳下載下傳的方法很多,但最終應該都是調用了這個方法
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.Timeout = Timeout;
request.ReadWriteTimeout = Timeout;
return request;
}
}
using (WebClientPro client = new WebClientPro())
{
client.Encoding = System.Text.Encoding.GetEncoding("GB2312");
Uri uri = new Uri(url);
return Encoding.UTF8.GetString(client.DownloadData(uri));
}