更改WebClient上的超时



我需要更改WebClient对象的超时。我传递了一个查询来检索CSV,该查询可以通过浏览器URL工作,但在我的.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;
        }
    }

这就是我现在所拥有的,如果有人能给我一个线索,我将不胜感激!

伙计,我觉得自己很笨。。。。

不管怎么说,在仔细研究了这个问题后,我发现了我需要做什么。我通常会删除这样的问题,但由于我刚刚发现我遗漏了什么,很难找到,我将继续发布答案。

我只需要把这些行添加到我的类中:

Property Timeout As Integer  '(I actually did this the "proper" way, but this would be sufficient.)

以及在GetWebRequest的Override:中

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

对于其他可能不需要添加自定义cookie处理的用户,有一种更简单的方法可以更改超时。

在我的项目中,我使用了这个片段,它要简单得多:

Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
request.Timeout = 10 * 60 * 1000 ' 10 minutes

不需要自定义类(它们已经存在(。

相关内容

  • 没有找到相关文章

最新更新