2009-08-06 48 views

答えて

45

Webクライアントがタイムアウトプロパティを持っていない、しかし、使用される内部のWebRequestクラスにタイムアウトへのアクセスを提供するためにWebクライアントから継承することが可能である。

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

使用法:VBでの人のコードにとってはそう

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

偉大な答え。 FYI私はこれを使用して、 'WebClient.UploadValues()'でも動作します – AlbatrossCafe

1

...

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 FileNameに)

'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 

(これは私だけの第2のポスト)

関連する問題