底层连接已关闭。服务器犯了违反协议
我想用下面的代码获得FTPS的FileZilla服务器的目录列表:底层连接已关闭。服务器犯了违反协议
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
ftpRequest.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCertificate);
ftpRequest.Credentials = new NetworkCredential(user, pass);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
我得到了一个异常时,FtpWebResponse)ftpRequest.GetResponse()
执行:
底层连接被关闭。服务器承诺违反协议 。
当我切换到正常的FTP连接。一切工作正常。
我错过了什么来建立这个FTPS连接? 感谢您的帮助
隐FTPS是不由FtpWebRequest
类(见here)的支持。
当EnableSsl
设置为true,它实际上触发AUTH TLS
命令到服务器,要求启动一个明确 FTPS会议。
就你而言,你必须配置Filezilla Server以使用Explicit FTPS。该过程记录在Filezilla Wiki
我遇到了同样的问题,但上传文件,在ftpWriter.Close()。 另外,例如,在成功的PrinWorkingDirectory之后,我无法执行GetRequestStream。
这个问题似乎是后期的“期待:100-继续” - 虽然我没有完全检查这个问题,但问题在某处。
我试着在互联网上找到的每个解决方案:改变的KeepAlive为true,则增加了App.config文件
<system.net>
<settings>
<servicePointManager expect100Continue="false"/>
<httpWebRequest useUnsafeHeaderParsing="true"/>
</settings>
</system.net>
真的没什么工作。
我花了很多时间和尝试不同的其他第三方库(想法我不喜欢太多),直到最后我来到一个代码,使用相同的类和方法,但工作! 分析代码后,我终于明白:代码针对的是.NET Framework 2.0,而代码则是针对.NET Framework 4.5。 我似乎微软在从Framework 3.5传递到Framework 4时做了一些小错误。
由于它不是将新项目转换为旧框架的解决方案,因此您可以为FTP操作创建一个dll,指向3.5 .NET Framework,或者,您可以使用第三方库。
我也许有点晚了,但它可能会在未来帮助其他受挫的开发者。
我会试一试 – 2016-07-24 17:10:35
如果这是客户端中的错误,我想知道为什么它只在连接到filezilla服务器时才会发生?我的代码可以和其他服务器一起工 – 2017-09-06 19:04:27
你有权访问Filezilla服务器吗?你确定证书是有效的吗?你配置它正确使用**明确的FTPS ** – 2014-10-09 12:52:05
是的我有权访问服务器。证书也是有效的,并且显式的FTPS被检查。我正在使用引用隐式SSL/TLS连接的端口990。它是否支持FtpWebRequest? – MadNeox 2014-10-09 13:04:27