2009-08-06 38 views

回答

45

WebClient没有超时属性,但它可以从WebClient继承,以允许访问所使用的内部WebRequest上的超时:

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

用法:

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

伟大的答案。仅供参考,我使用这个,它也适用于'WebClient.UploadValues()' – AlbatrossCafe 2017-02-06 23:20:35

1

因此,对于那些在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 

功能UploadFile(BYVAL URL作为字符串,BYVAL文件路径作为字符串,BYVAL文件名作为字符串)

'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 

(这只是我的第二个职位)