Fixing - System.Net.WebException: The remote server returned an error: (500) Syntax error, command unrecognized
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.
I too encountered the same exception with FTPWebRequest
within a custom MSBuild task... luckily the task exposed a setting UsePassive="false"
(which sets the UsePassive
property on the FTPWebRequest
object). Changing the value to "true"
fixed the problem. Hope this helps!
- (Set
UsePassive
to)false
if the client application's data transfer process listens for a connection on the data port; otherwise,true
if the client should initiate a connection on the data port. The default value istrue.
- Setting the
UsePassive
property totrue
sends the"PASV"
command to the server. This command requests the server to listen on a data port and to wait for a connection rather than initiate one upon receipt of a transfer command. - If
UsePassive
is set to true, the FTP server may not send the size of the file, and download progress can always be zero. IfUsePassive
is set tofalse
, a firewall can raise an alert and block the file download.