我有以下 C# 代码。当针对 .NET Framework 3.5 或 2.0 编译时,它运行得很好(我没有针对 3.0 进行测试,但它很可能也能工作)。问题是,当针对 .NET Framework 4.0 构建时它会失败。
FtpWebRequest Ftp = (FtpWebRequest)FtpWebRequest.Create(Url_ + '/' + e.Name);
Ftp.Method = WebRequestMethods.Ftp.UploadFile;
Ftp.Credentials = new NetworkCredential(Login_, Password_);
Ftp.UseBinary = true;
Ftp.KeepAlive = false;
Ftp.UsePassive = true;
Stream S = Ftp.GetRequestStream();
byte[] Content = null;
bool Continue = false;
do
{
try
{
Continue = false;
Content = File.ReadAllBytes(e.FullPath);
}
catch (Exception)
{
Continue = true;
System.Threading.Thread.Sleep(500);
}
} while (Continue);
S.Write(Content, 0, Content.Length);
S.Close();
FtpWebResponse Resp = (FtpWebResponse)Ftp.GetResponse();
if (Resp.StatusCode != FtpStatusCode.CommandOK)
Console.WriteLine(Resp.StatusDescription);
问题出在通话流中S = Ftp.GetRequestStream();,它抛出一个 WebException 实例,并带有消息“远程服务器返回错误:(500) 语法错误,命令无法识别”。
有人知道为什么会这样吗?
附言。我与 ECM Alfresco 中的虚拟 ftp 服务器通信。
编辑:我最近发现,在 Windows 7 上不可能有 .NET Framework 3.5 Windows 服务,所以解决这个问题会很好。我需要做的是将文件上传到 ftp - C# 中还有另一种(有效的)方法吗?
edit2:之前的编辑不正确,我有点困惑......
我在这里找到了类似的帖子http://bytes.com/topic/net/answers/792209-problems-ftpwebrequest-getrequeststream-c http://bytes.com/topic/net/answers/792209-problems-ftpwebrequest-getrequeststream-c
并制定了对该人有效的决议。
尝试这个:
change
reqFTP.UsePassive = true;
to
reqFTP.UsePassive = false;
UsePassive:指定是否使用
主动或被动模式。
早些时候,主动 FTP 可以很好地工作
所有客户,但现在,正如大多数
随机端口被阻塞
防火墙,主动模式可能会失败。
被动 FTP 在这方面很有帮助
案件。但它仍然会引起问题
服务器。请求的端口越高
由客户端在服务器上也可以
被防火墙阻止。但是因为
FTP 服务器需要使自己的
最大程度可访问的服务器
客户数量,他们几乎
当然需要支持被动FTP。
被动模式被认为是安全的
因为它保证了所有数据流
启动来自内部(客户)
网络而不是来自
外部(服务器)。
另外,根据 MSDN 文档,http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.usepassive.aspx http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.usepassive.aspx
如果 UsePassive 设置为 true,则 FTP
服务器可能不会发送的大小
文件,下载进度随时可以
为零。如果 UsePassive 设置为
false,防火墙可以发出警报
并阻止文件下载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)