2009-08-06 12 views

Respuesta

45

El cliente Web no tiene una propiedad de tiempo de espera, sin embargo, es posible heredar del cliente Web para dar acceso al tiempo de espera en la WebRequest interno utilizado:

public class WebClientEx : WebClient 
{ 
    public int Timeout {get; set;} 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address); 
     request.Timeout = Timeout; 
     return request; 
    } 
} 

Uso:

var myClient = new WebClientEx(); 
myClient.Timeout = 900000 // Daft timeout period 
myClient.UploadData(myUri, myData); 
+1

Gran respuesta. FYI Usé esto y también funciona con 'WebClient.UploadValues ​​()' – AlbatrossCafe

1

Así que para los que el código en VB ...

Public Class WebClientExtended 
    Inherits WebClient 
    Public Property Timeout() As Integer 
     Get 
      Return m_Timeout 
     End Get 
     Set(value As Integer) 
      m_Timeout = value 
     End Set 
    End Property 
    Private m_Timeout As Integer 

    Protected Overrides Function GetWebRequest(address As Uri) As WebRequest 
     Dim request = MyBase.GetWebRequest(address) 
     request.Timeout = Timeout 
     Return request 
    End Function 
End Class 

Función (URL ByVal como secuencia, de ByVal como secuencia FilePath, ByVal NombreDeArchivo As String) UploadFile

'Call API to Upload File 
    Dim myWebClient As New WebClientExtended 
    myWebClient.Timeout = 10 * 60 * 1000 
    Dim responseArray As Byte() 
    Dim responseString As String = "" 

    Try 
     responseArray = myWebClient.UploadFile(URL, FilePath + "/" + FileName) 
     responseString = System.Text.Encoding.ASCII.GetString(responseArray) 
    Catch ex As Exception 
     responseString = "Error: " + ex.Message 
    End Try 

    Return responseString 

End Function 

(esto es sólo mi segundo post)

Cuestiones relacionadas