【问题标题】:HttpWebRequest "operation has timed out"HttpWebRequest“操作已超时”
【发布时间】:2011-05-26 13:44:15
【问题描述】:

我在我的 Windows 应用程序中使用 httpWebRequest 将文件从网络服务器 (sURL) 下载到本地文件夹 (fileDestination),如下所示:

Public Function DownloadFile(ByVal sURL As String, _
                        ByVal fileDestination As String, _
                        ByVal WebRequestType As String) As Boolean  


    Dim URLReq As HttpWebRequest
        Dim URLRes As HttpWebResponse
        Dim FileStreamer As FileStream
        Dim bBuffer(999) As Byte
        Dim iBytesRead As Integer
        Dim folderDestination As String
        Dim sChunks As Stream

        Try

            FileStreamer = New FileStream(fileDestination, FileMode.Create)

            URLReq = WebRequest.Create(sURL)
            URLRes = URLReq.GetResponse 'Error occurs here!!
            sChunks = URLReq.GetResponse.GetResponseStream
            DownloadProgressBar.Value = 0
            DownloadProgressBar.Maximum = URLRes.ContentLength

            Do
                iBytesRead = sChunks.Read(bBuffer, 0, 1000)
                FileStreamer.Write(bBuffer, 0, iBytesRead)
            Loop Until iBytesRead = 0

            sChunks.Close()
            FileStreamer.Close()
            URLRes.Close()

            Return True
        Catch ex As Exception
            Return False
        End Try

End Function

这适用于前几个文件。但随后它开始在URLReq.GetResponse 行上给出以下错误:

“操作已超时”

有人知道是什么原因造成的吗?

【问题讨论】:

  • 崩溃时下载的文件有多大?
  • 我注意到您将问题标记为 asp.net,这一切都是在 asp.net 网页中发生的,还是从 asp.net 网站请求的 Windows 应用程序?
  • @Urbycoz,问一个显而易见的问题,您是否可以使用常规网络浏览器下载您尝试访问的任何内容?此外,您尝试从您控制的服务器还是从第三方下载的内容是什么?如果是后者,某些网站(尤其是 Google)会检查用户代理标头以寻找机器人。尝试手动将请求的用户代理设置为一些常见的用户代理。
  • @Urbycoz,看看这个帖子,他说他需要添加一个Request.Abort 电话。 andrewdothay.net/blog/2007/07/25/…
  • @Urbycoz,如果是这种情况,您也许可以设置System.Net.ServicePointManager.DefaultConnectionLimit

标签: vb.net httpwebrequest download


【解决方案1】:

如果您的目标是 1.1 框架并且正在运行多个并发请求,请尝试设置 System.Net.ServicePointManager.DefaultConnectionLimit

【讨论】:

    【解决方案2】:

    超时设置为 10000 毫秒(或 10 秒)。往返网络服务器的时间足够长吗?

    MSDN Documentation 表示默认值为 100 秒(100000 毫秒),您是否有任何理由更改了该默认值?

    【讨论】:

    • 是的。每次轰炸都需要很长时间,我厌倦了等待。我再把它拿出来。问题仍然存在。
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 2019-02-14
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多