On reading your question I was suspicious this has to do with (or could be corrected by) setting the KeepAlive
to false
. Looking on SO - this question references the same problem and points to it as well: https://stackoverflow.com/a/2071374/1803682
Try setting:
request.KeepAlive = false;
With KeepAlive
set to false
your connection will be closed at the end of each request. If you are transmitting a lot of files this could be an issue - as it takes time to resend credentials, etc. The upside is you recreate the connection in a known / initial state which should solve your problem (even if it is not the root cause).
To see what is going on, if you can enable detailed logging on your server you should see the last command issued before seeing this error returned. This should give you a better idea of what is up. Found this thread saying much the same thing.
Update:
If I had read to the bottom of the link I posted myself I could have answered even better, the command probably being reissued is some part of the login process (i.e. USER username
) and this is your likely issue:
The reason the creadentials may no longer be valid is that the WebRequest uses a lease that expires after a certain amount of time. If you don't explicitly instantiate the lease and define its timeouts, the FtpWebRequest appears to use default timeout values. I believe what's happening is that when the lease expires the FtpWebRequest will then try to log on again.
So looking here with the right search:
yields that the default timeout waiting for requests is not infinite as specified but actually 10000 ms
. Which seems a pretty big discrepancy. So you can also try setting:
request.Timeout = -1;
And see if it corrects your error.
Really don't think this could be your issue so moving it to the bottom:
Also - check that your request.ReadWriteTimeout
is appropriate for the speed you see for the larger file. The default is 5 minutes which would be pretty long for 290k, so I expect this is not the source of your error. Also - I would expect a connection closed error if this was the problem.