Openwrite 的 System.Net.FtpClient 问题
Posted
技术标签:
【中文标题】Openwrite 的 System.Net.FtpClient 问题【英文标题】:System.Net.FtpClient issues with openwrite 【发布时间】:2017-04-27 12:56:42 【问题描述】:在使用标题中的库解决此问题时,我已经看到了几十个示例。我看到应该工作的常见示例是:
string destinationPath = PathInfo.FileNameConvention;
using (FileStream fileStream = File.OpenRead(sourcePath))
using (Stream ftpStream = FTPClient.OpenWrite(string.Format("'0'", destinationPath), FtpDataType.ASCII))
fileStream.CopyTo(ftpStream);
执行此代码时,我在 ftpTrace 日志中收到名称长度错误。当我仅使用目标路径时,出现超时错误。我正在发送到大型机 MVS 操作系统。我可以正常连接并登录。能够通过 ftpclient.execute 方法提交站点命令。出于好奇,我也尝试通过 execute 方法提交一个 put 命令,并得到了未知的 put 命令。有人也有这个问题吗?
由于我已通过 cmd 提示符 ftp 手动提交文件并且成功,因此连接工作正常。
一些背景资料,库的OpenWrite方法使用传入的路径发送STOR命令,默认为二进制类型。
【问题讨论】:
在进行 FTP 时,您可能需要使用更改目录命令,以便长文件名或路径名不会影响我首先检查的功能..Meaning ChangeDir, then pass the filename not the full Path
看看是否有帮助跨度>
@MethodMan Path.GetFileName(localFile) 基本上按照您的描述进行。它采用完整的本地路径并仅获取文件名。
【参考方案1】:
检查您是否已将 FTP 库配置为使用主动模式(或在防火墙和大型机中启用 FTP 被动模式)
长答案: FTP 协议使用两种连接,一种是客户端到服务器的命令连接,另一种是客户端到服务器(被动模式)或服务器到客户端(主动模式)的数据连接。
使用不正确的模式会导致未针对该模式配置的防火墙断开您的数据连接,这将导致您遇到超时错误。
由于 Windows ftp.exe 仅支持主动模式,并且您没有在代码中设置模式,我猜大型机配置为主动模式,而您的 FTP 库默认为被动模式。被动模式现在非常普遍,因为主动模式不适用于 NAT-ing 路由器。
检查是否有更改传输模式的配置设置,但如果库仅支持被动模式,请不要感到惊讶。
更多信息:
What is the difference between active and passive FTP?
网络地址转换(NAT):https://en.wikipedia.org/wiki/Network_address_translation
【讨论】:
对不起!我应该指定一些图书馆客户的详细信息。我实际上有活动模式处于活动状态,那是超时。当我打开被动模式时,它给了我一个连接被服务器错误拒绝。服务器管理员要求我以被动模式执行此操作,我正在等待网络团队关于端口的回复。该库支持多种类型的主动和被动。目前,我已根据服务器管理请求将其设置为扩展被动。这正在生成连接被拒绝的消息。 今天我了解了“扩展被动”:-) 我想我在 IPv4 世界中生活的时间太长了。听起来您很快就会在网络管理员的帮助下解决问题,祝您好运!以上是关于Openwrite 的 System.Net.FtpClient 问题的主要内容,如果未能解决你的问题,请参考以下文章
(69)C#里WriteAllLinesWriteAllBytes和OpenWrite的使用
使用WebClient.OpenWrite 方法 (String, String)这个的时候出现了内存溢出