修复 – System.Net.WebException:远程服务器返回错误:(500)语法错误,命令无法识别
我创建了FTP代码来传输文件。 此代码工作正常,但它有时会导致错误500.确切的错误是 –
Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Net.WebException: The remote server returned an error: (500) Syntax error, command unrecognized. at System.Net.FtpWebRequest.CheckError() at System.Net.FtpWebRequest.SyncRequestCallback(Object obj) at System.Net.CommandStream.Abort(Exception e) at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage) at System.Net.FtpWebRequest.GetRequestStream() at ST_772dn22cj49ndfddatee.csproj.ScriptMain.Main() --- End of inner exception stack trace ---
我注意到加载最大文件时出现错误,即大约290 KB。 所有其他文件都不到这个,我也不会有任何例外。 我不知道为什么会这样。 有人可以告诉我为什么吗?
顺便说一句,如果您发现我的代码或逻辑错误有一些改进空间,那么请同时提及。 我不是真的在寻找代码评论,但欢迎。
public void Main() { Boolean conditions = true; if(conditions == true) { string fileLocation = "my windows directory"; string fileName = "fileName.extension"; string ftpFolder = @"/ftpFolder/"; Boolean ftpMode = true; //passive or active. True = passive string ftpPassword = "password"; int ftpPort = 21;// the default string ftpServerName = "server name"; string ftpUserName = "user name"; //Create an object to communicate with the server. string ftpRequestString = "ftp://" + ftpServerName + ":" + ftpPort + ftpFolder + fileName; try{ FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpRequestString); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(ftpUserName, ftpPassword); //Set mode if(ftpMode == true){ request.UsePassive = true; } //Copy the file to the request. string filePath = @fileLocation + "\" + fileName; StreamReader sourceStream = new StreamReader(filePath); byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); sourceStream.Close(); request.ContentLength = fileContents.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(fileContents, 0, fileContents.Length); requestStream.Close(); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); response.Close(); } catch (WebException ex) { MessageBox.Show(ex.Message); }//try-catch } }//main
在阅读你的问题时,我怀疑这与将KeepAlive
设置为false
有关(或可以通过纠正)。 看着 – 这个问题引用了同样的问题并指出了它: https : //stackoverflow.com/a/2071374/1803682
尝试设置:
request.KeepAlive = false;
将KeepAlive
设置为false
您的连接将在每个请求结束时关闭 。 如果您要传输大量文件,这可能是一个问题 – 因为重新发送凭据等需要时间。好处是您在已知/初始状态下重新创建连接以解决您的问题(即使它不是根目录)原因)。
要查看发生了什么,如果您可以在服务器上启用详细日志记录,则应在返回此错误之前看到发出的最后一个命令。 这应该可以让您更好地了解最新情况。 发现这个post说同样的事情。
更新:
如果我已经阅读了链接的底部我自己发布了我可以回答得更好,可能重新发布的命令是登录过程的一部分(即USER username
),这是你可能遇到的问题:
凭证可能不再有效的原因是WebRequest使用在一定时间后过期的租约。 如果未显式实例化租约并定义其超时,则FtpWebRequest似乎使用默认超时值。 我相信正在发生的事情是,当租约到期时,FtpWebRequest将尝试再次登录。
所以用正确的搜索来看这里 :
产生等待请求的默认超时不是指定的无限但实际上是10000 ms
。 这似乎是一个非常大的差异。 所以你也可以尝试设置:
request.Timeout = -1;
并查看它是否纠正了您的错误。
真的不认为这可能是你的问题,所以把它移到底部:
另外 – 检查您的 request.ReadWriteTimeout
是否适合您在较大文件中看到的速度。默认值为5分钟 ,对于290k来说相当长,所以我希望这不是您错误的来源。 另外 – 如果这是问题,我希望连接关闭错误。
我也在自定义的MSBuild任务中遇到了与FTPWebRequest
相同的exception……幸运的是,该任务暴露了一个设置UsePassive="false"
(它设置了FTPWebRequest
对象上的FTPWebRequest
属性)。 将值更改为"true"
可解决问题。 希望这可以帮助!
对于任何其他有这个问题并且以上似乎不起作用的人,我发现当我遇到上述错误时,它与我的用户名或密码有关。 我确信有很多人从Excel复制并粘贴到SQL中,因此,SQL认为我的用户名/密码有回车换行符(当你按Enter键时)。
我的代码实际上选择了用户名为“Myusername&vbcrlf”。
希望这有助于某人,如果他们有同样的问题。
干杯!
上述就是C#学习教程:修复 – System.Net.WebException:远程服务器返回错误:(500)语法错误,命令无法识别分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031885.html