FTPWebRequest.GetResponse 服务器超时,本地调试不超时

FTPWebRequest.GetResponse timeout on server, not on local debug

我制作了一个 Azure 云服务,它从 FTP 服务器下载文件,然后将它们上传到 Azure 存储。 当我调试我的服务时,一切正常,文件上传到存储。发布服务后,我收到错误消息(并非总是如此,但 5 次尝试中有 4 次): "System.Net.WebException: The operation has timed out." 错误的行号对应行

Dim response As FtpWebResponse = CType(request.GetResponse, FtpWebResponse)

为什么它适用于本地调试而不适用于云端? 对于信息,没有代理什么的。它似乎以随机方式工作。 我的代码的一部分:

 'Request
    Dim request As FtpWebRequest = CType(WebRequest.Create(Configuration.Address + suffixPath), FtpWebRequest)
    request.Method = WebRequestMethods.Ftp.DownloadFile

    'Login and pwd
    request.Credentials = New NetworkCredential(Configuration.Login, Configuration.Password)
    request.UsePassive = False
    request.KeepAlive = True
    request.Timeout = Integer.MaxValue
    request.ReadWriteTimeout = Integer.MaxValue

    Try
        Dim response As FtpWebResponse = CType(request.GetResponse, FtpWebResponse)
        Dim stream As Stream = response.GetResponseStream
...

谢谢大家

--- 编辑 ----

我找到了这篇文章: http://feedback.azure.com/forums/217313-networking-dns-traffic-manager-vpn-vnet/suggestions/3346609-icmp-support-for-azure-websites-roles-cloud-serv

建议为 Azure 虚拟机、服务添加 ICMP 流量...

我尝试从我的 Azure 云服务到我的 FTP 服务器进行简单的 ping 测试,超时为 30 秒,我立即收到...超时错误。

你们认为这可以解释我的问题吗? 如果是,是否有任何方法可以通过 UDP 或其他方式从 ftp 下载文件?

我终于找到了解决问题的方法。

Azure VM 或服务内对 ICMP 流量的限制是问题所在。

所以,我只是使用 WebClient 对象来下载我的文件。

Dim webclient As New WebClient
webclient.Credentials = New NetworkCredential(login, password)
Dim bytesData As Byte() = webclient.DownloadData(addressOfFTPServer + fileNameToDownload)
Return bytesData

希望这会有所帮助。