我有一个小型控制台应用程序,可以使用FtpWebRequest对象擦除一些数据并将其上传到FTP目录 - 非常典型。
当我使用调试器逐步完成它时,我已经成功地工作了。正在使用正确的数据将文件写入远程服务器。然后,当我拿出断点并让它翻录时,它创建了没有数据的文件,然后挂起直到它最终超时。除了超时之外没有例外。我把断点重新放入,确定它完美无缺。
我认为调试行为导致暂停并放入Thread.Sleep(10),并再次完美地工作。
我对此只是一个解释感到高兴(只要这不是可怕的做法),但是如何做得更好的建议也将受到赞赏。我会注意到我只是谨慎使用第三方控件。
编辑:我还应该提一下,我不想创建一个物理文件,我宁愿直接编写Stream。
以下是相关代码:
filePathAndName = new Uri(String.Format("{0}{1}_{2}.txt", Properties.Settings.Default.QTMFTPDirectory,
fileNamePrefix, DateTime.Now.ToString("MMddyyHHmmss")));
fileContents = Encoding.UTF8.GetBytes(csv);
request = (FtpWebRequest)WebRequest.Create(filePathAndName);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(Properties.Settings.Default.FTPUserName, Properties.Settings.Default.FTPPassword);
request.ContentLength = fileContents.Length;
request.KeepAlive = false;
try
{
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(fileContents, 0, fileContents.Length);
System.Threading.Thread.Sleep(10); // Won't work without this.
}
}
catch (Exception ex)
{
LogError(ex);
}
谢谢!
答案 0 :(得分:0)
尝试手动关闭它。
reqStream.Close(); // Close
如果这没有帮助,您可以尝试从服务器获取响应。
GetResponse();
来源:
http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.getrequeststream(v=vs.110).aspx
编辑:
我知道,using
关键字有时无法正确关闭连接。