2

我正在使用 C# 将一些文件上传到 ftp 服务器。如果文件已经存在 FtpWebRequest 超时,所以我想先删除它。

但是 WebRequestMethods.Ftp.DeleteFile 也总是超时。难道我做错了什么?

这是我的代码:

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address);

request.Credentials = new NetworkCredential(Username, Password);
request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.DeleteFile;

try
{
    FtpWebResponse resp = (FtpWebResponse)request.GetResponse();
}
catch (Exception e)
{
    ...         
}

编辑:哦,我试图删除的女巫文件并不重要。只要文件存在,请求就会一直超时。如果文件不存在,则会引发不同的异常。

凭据没有问题,我可以进行其他操作(上传/下载没有问题)。这也不是服务器问题,如果我使用具有相同用户名的客户端(FileZilla)连接到它/传递一切正常。

谢谢您的帮助。

4

3 回答 3

1

The thing I have found using this Ftp via FtpWebRequest, is it is inherently a lot slower (since it is using the HTTP protocol over port 80), and it drives me crazy because FileZilla can do it a lot quicker (obviously using FTP protocol over port 20/21). There is a open source ftp component found here, I do not know if it will work for you, but worth a shot.

I know this is a subjective answer that will get downvoted, but personally, using ftp over port 80 is bound to be a lot slower especially on file operations like what you are trying to achieve.

于 2010-01-26T13:37:23.863 回答
1

您是否有权访问 FTP 服务器的日志?如果您确实查看了 FTPWebRequest 正在执行的命令。可能是它试图在删除之前列出目录。

另一个问题可能是服务器处于被动模式,我相信 FileZilla 可能会自动检测到这一点,检查 filezilla 中的连接以查看。

于 2010-01-26T13:44:34.017 回答
1

了解客户端和 FTP 服务器之间发送了哪些命令有助于找出导致超时的原因。是否可以使用诸如Ethereal之类的数据包分析器来捕获通信日志?

替代方法可能是使用第三方 FTP 组件并启用登录。以下代码使用我们的Rebex FTP

// create client 
Ftp client = new Ftp();
// enable logging 
client.LogWriter = new Rebex.FileLogWriter(@"c:\temp\log.txt", Rebex.LogLevel.Debug); 

// connect
client.Connect("ftp.example.org");
client.Login("username", "password");

// browse directories, transfer files 
client.DeleteFile("file.txt");

// disconnect 
client.Disconnect();
于 2010-02-24T17:36:07.057 回答