What can happen is that the firewall closes the command channel, while the transfer keeps going on on the data channel. The reason for this is that the firewall, not seeing any communication on the command channel, closes it after a certain time. So when the server has finish transferring the data (on the data channel), it send the reply (on the command channel) to tell the client that the transfer is done, but the reply does go through, so the component never receive the the reply, and it times out at a certain point.
However, in your case we are talking about a file that is only 3MB big, and that takes less than a minute to download, so I'm a bit surprise the firewall would close the command channel so fast.
Anyhow, if this is the issue, there is three possible solution to this issue. You can set the KeepAliveInterval property (which send a NOOP command to the server on the command channel at a specified interval) to a value, in seconds, that is bellow the firewall threshold for closing the connection. Or, if you have access to it, set the firewall so it does not close an ftp connection, or set a greater threshold time. Last, you can monitor the size of the file, and when you know the whole file has been transfered, you can call the Abort() method, and then you will be able to continue your process.
André
Software Developer and Tech Support
Xceed Software Inc.