当前位置: 首页 > 编程语言 > C#

Fix–System.Net.WebException-Theremoteserverreturnedanerror-(500)Syntaxerror,commandnotrecognized分享

时间:2023-04-10 16:10:01 C#

Fix–System.Net.WebException:Theremoteserverreturnederror:(500)Syntax错误,命令无法识别我创建的用于传输文件的FTP代码。此代码工作正常,但有时会导致错误500。确切的错误是-错误:System.Reflection.TargetInvocationException:调用目标已抛出异常。--->System.Net.WebException:远程服务器返回错误:(500)语法错误,命令无法识别。在System.Net.FtpWebRequest.CheckError()在System.Net.FtpWebRequest.SyncRequestCallback(Objectobj)在System.Net.CommandStream.Abort(Exceptione)在System.Net.FtpWebRequest.FinishRequestStage(RequestStagestage)atSystem.Net.FtpWebRequest.GetRequestStream()atST_772dn22cj49ndfddatee.csproj.ScriptMain.Main()---内部异常堆栈跟踪结束---我注意到加载最大文件时出错,这大约是290KB。所有其他文件都达不到这个文件,我也没有得到任何例外。我不知道为什么它必须是这样的。有人能告诉我为什么吗?顺便说一句,如果您发现我的代码或逻辑错误有改进的余地,那么也请提及。我不是真的在寻找代码审查,但欢迎。publicvoidMain(){布尔条件=true;if(conditions==true){stringfileLocation="我的windows目录";string文件名="文件名.扩展名";字符串ftpFolder=@"/ftpFolder/";布尔ftpMode=true;//被动或主动。True=被动字符串ftpPassword="密码";intftpPort=21;//默认字符串ftpServerName="服务器名称";stringftpUserName="用户名";//创建一个与服务器通信的对象。字符串ftpRequestString="ftp://"+ftpServerName+":"+ftpPort+ftpFolder+fileName;尝试{FtpWebRequest请求=(FtpWebRequest)WebRequest.Create(ftpRequestString);request.Method=WebRequestMethods.Ftp.UploadFile;request.Credentials=newNetworkCredential(ftpUserName,ftpPassword);//设置模式if(ftpMode==true){request.UsePassive=true;}//将文件复制到请求中。字符串文件路径=@fileLocation+"\"+文件名;StreamReadersourceStream=newStreamReader(filePath);byte[]文件内容=Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());sourceStream.Close();request.ContentLength=fileContents.Length;流requestStream=request.GetRequestStream();requestStream.Write(fileContents,0,fileContents.Length);请求流.Close();FtpWebResponse响应=(FtpWebResponse)request.GetResponse();响应.关闭();}catch(WebExceptionex){MessageBox.Show(ex.Message);}//try-catch}}//main在阅读你的问题时,我怀疑这与将KeepAlive设置为false有关(或者可以通过查看它来纠正-这个问题引用了同样的问题并指向它:https://stackoverflow.com/a/2071374/1803682尝试设置:request.KeepAlive=false;将KeepAlive设置为false您的连接将在每个请求结束时关闭。如果您传输大量数据,这可能是个问题文件-因为重新发送凭据等需要时间。好处是您可以在已知/初始状态下重新创建连接以解决您的问题(即使它不是根本原因)。如果可以的话,看看发生了什么在服务器上启用详细日志记录,您应该看到返回此错误之前发出的最后一个命令。这应该让您更好地了解发生了什么。发现这篇文章说了同样的话。更新:如果我阅读了链接底部并自己发布我可以回答得更好,也许重新发出的命令是登录过程的一部分(即USERusername),这就是您可能遇到的问题:CredentialsmaynolongerbeThereasonthisworksisthatWebRequest使用在一定时间后到期的租约。如果租约未明确实例化且其超时已定义,则FtpWebRequest似乎使用默认超时值。我相信正在发生的事情是,当租约到期时,FtpWebRequest将尝试再次登录。因此,通过适当的搜索查看此处:生成等待请求的默认超时不是指定的无限,而是实际10000毫秒。这似乎有很大的不同。所以你也可以尝试设置:request.Timeout=-1;看看它是否能纠正你的错误。不要真的认为这可能是你的问题,所以把它移到底部:另外-检查你的request.ReadWriteTimeout是否适合你看到的较大文件的速度。默认值为5分钟,这对于290k来说已经相当长了,所以我希望这不是您的错误来源。另外-如果这是问题所在,我希望连接关闭错误。我在自定义MSBuild任务中也遇到了与FTPWebRequest相同的异常……幸运的是,该任务公开了一个设置UsePassive="false"(它在FTPWebRequest对象上设置了FTPWebRequest属性)。将值更改为“true”可解决问题。希望这可以帮助!对于遇到此问题且上述问题似乎不起作用的任何其他人,我发现当我收到上述错误时,它与我的用户名或密码有关。我敢肯定很多人从Excel复制粘贴到SQL,结果,SQL认为我的用户名/密码有回车符和换行符(当你按下回车键时)。我的代码实际上将用户名选择为“Myusername&vbcrlf”。希望这对遇到同样问题的人有所帮助。干杯!以上是C#教程:Fix–System.Net.WebException:Theremoteserverreturnedanerror:(500)syntaxerror,命令无法识别分享的全部内容,如果对大家有用需要了解一下更多关于C#教程的内容,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: