Extension de la classe WebClient pour exposer le Timeout
:salut:
La classe ExtendedWebClient dérivant de la classe WebClient vous permet de définir un timeout pour tout instance de la classe WebClient (Cette classe ne le permet pas bien qu'elle utilise la classe HttpWebRequest pour télécharger et téléverser des données).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
/// <summary>
/// Classe dérivée de la classe WebClient
/// </summary>
public class ExtendedWebClient : WebClient
{
#region Fields
private WebRequest request;
#endregion // Fields
#region Properties
/// <summary>
/// Obtient la durée du timeout
/// </summary>
public int Timeout { get; private set; }
/// <summary>
/// Obtient le container de cookies
/// </summary>
public CookieContainer CookieContainer { get; private set; }
#endregion // Properties
#region Consctuctors
/// <summary>
/// Constructeur de la classe ExtendedWebClient
/// </summary>
/// <param name="timeout">Durée en millisecondes </param>
public ExtendedWebClient(int timeout)
{
this.Timeout = timeout;
this.CookieContainer = new CookieContainer();
}
#endregion // Constructors
#region Overriden methods
protected override WebRequest GetWebRequest(Uri address)
{
this.request = base.GetWebRequest(address);
// S'il s'agit d'une instance de type HttpWebRequest alors on instancie le container de cookie
if (this.request is HttpWebRequest)
{
(this.request as HttpWebRequest).CookieContainer = this.CookieContainer;
}
// Si this.Timeout <= 0 alors la valeur par défaut qui sera utilisée.
this.request.Timeout = this.Timeout <= 0 ? this.request.Timeout : this.Timeout;
return this.request;
}
#endregion // Overriden methods
} |