我需要更改WebClient对象的超时。我有一个查询,我正在通过浏览器URL检索CSV,但在我的.Net项目中不起作用。看来客户超时了。这是行...
ResponseText = Client.DownloadString("http://someBIwebquery.com")
该行执行,但ResponseText后面没有任何内容。我在过去使用相同的方法将其他查询传递到同一服务器,并且当作为浏览器URL传递时,这确实有效,因此问题只是WebClient超时。
更复杂的是,这个对象已被修改为接受cookie,因此我已经使用了一个改变的WebClient类:
Imports System.Net
Public Class CookieAwareWebClient
Inherits WebClient
Private cc As New CookieContainer()
Private lastPage As String
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim R = MyBase.GetWebRequest(address)
If TypeOf R Is HttpWebRequest Then
With DirectCast(R, HttpWebRequest)
.CookieContainer = cc
If Not lastPage Is Nothing Then
.Referer = lastPage
End If
End With
End If
lastPage = address.ToString()
Return R
End Function
Protected Overrides WebRequest GetWebRequest(Uri address)
End Class
我需要找出一种覆盖超时请求的方法。我已经找到了这个C#代码,但是我在翻译它时遇到了麻烦。在谈到C#时,我并不是完全无能为力,但我遗漏了一些东西:
private class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 20 * 60 * 1000;
return w;
}
}
这就是我现在所拥有的,如果有人能给我一个线索,我会很感激!
答案 0 :(得分:1)
男人我感到愚蠢......
无论如何,在仔细观察之后,我想出了我需要做的事情。我通常会删除这样的问题,但由于我只是想出了我所遗漏的内容并且很难找到,我会继续发布答案。
我只需要将这些行添加到我的班级中:
Property Timeout As Integer '(I actually did this the "proper" way, but this would be sufficient.)
和Override for GetWebRequest:
R.Timeout = Me.Timeout
几乎就是这样。这是其中的阶级:
Imports System.Net
Public Class CookieAwareWebClient
Inherits WebClient
Private cc As New CookieContainer()
Private lastPage As String
Private _Timeout As Integer
Public Property Timeout() As Integer
Get
Return _Timeout
End Get
Set(ByVal value As Integer)
_Timeout = value
End Set
End Property
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim R = MyBase.GetWebRequest(address)
R.Timeout = Me.Timeout
If TypeOf R Is HttpWebRequest Then
With DirectCast(R, HttpWebRequest)
.CookieContainer = cc
If Not lastPage Is Nothing Then
.Referer = lastPage
End If
End With
End If
lastPage = address.ToString()
Return R
End Function
End Class
答案 1 :(得分:0)
对于可能不需要添加自定义cookie处理的其他用户,可能不需要添加自定义cookie处理,有一种更简单的方法可以更改超时。
在我的项目中,我使用了这个简单的代码片段:
Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
request.Timeout = 10 * 60 * 1000 ' 10 minutes
不需要自定义类(它们已经存在)。