我正在使用此代码将文件上传到FTP服务器:
String source = @"E:\\file\e1.txt";
String ftpurl = @"ftp://ftp.myftpserver.pl";
String ftpusername = @"myusername@myftpserver.pl";
String ftppassword = @"mypassword";
string filename = Path.GetFileName(source);
string ftpfullpath = ftpurl + "/" + filename;
Debug.WriteLine("Uploading...");
var fs = File.OpenRead(source);
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.Timeout = -1;
ftp.KeepAlive = true;
ftp.UseBinary = true;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
Stream ftpstream = ftp.GetRequestStream();
fs.CopyTo(ftpstream);
ftpstream.Close();
Debug.WriteLine("Upload complete.");
文件退出大 - 大约50 MB。因此,在上传文件后,appliaction挂起。这是调试窗口中的输出
Uploading... //immediately after executing the code
The thread 0xd50 has exited with code 0 (0x0). //after some time
它永远不会打印出来:
Upload complete.
请注意,在线程退出后,上传仍在进行中,但未取消。我注意到这个问题,当我试图在循环中从List发送多个文件时 - 应用程序在上传第一个文件后挂起。 有人能帮助我吗?
// EDIT 出于测试目的,我试图在for循环中上传更小的文件。它似乎在
后工作The thread XXX has exited with code 0 (0x0).
因为它的大小,但我的服务器接受更大的文件,我在ftp上有可用空间。有什么想法吗?
答案 0 :(得分:1)
您很可能在控制频道上有超时。数据通道很忙,因此很开心......但是,您在代码中设置的任何超时或保持活动都不会在此处适用。深入检查您的FTP日志应该显示文件上传然后意外关闭会话。 检查防火墙和负载均衡器(如果有的话)(F5上的默认值对我来说完全一样......)