天天看點

設定 WebClient 逾時時長

.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));
}