I have a small FTP class, written in VB.NET 2.0, which keeps polling for a particular file at a remote location, at 2 minute intervals, till it successfully downloads the file, and then it stops.

So far I had been using wget as an external process, and recently I have switched to using the FtpWebRequest class.

Now what i have noticed is that the first attempt always fails, even if the particular file is available on the remote server. The error returned is System.Net.WebException - Request Timed Out.

However, in the next run, after 2 minutes, the process succeeds, with exactly the same parameters.

The relevant part of the code:


Dim myFtpWebRequest As FtpWebRequest
        Dim myFtpWebResponse As FtpWebResponse
        Dim myStreamWriter As StreamWriter
        Dim strURL As String = ""

        strURL = "ftp://" & strFTPURL & strFTPFolder & strFileName

        myFtpWebRequest = DirectCast(WebRequest.Create(strURL), FtpWebRequest)
        myFtpWebRequest.KeepAlive = False
        myFtpWebRequest.Timeout = 20000
        myFtpWebRequest.UsePassive = blnUsePassive
        myFtpWebRequest.UseBinary = True

        myFtpWebRequest.Credentials = New NetworkCredential(strFTPUserName, strFTPPassword)
        myFtpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile
        myFtpWebResponse = myFtpWebRequest.GetResponse()

Can someone throw some light on this?