我有一个小型控制台应用程序,它抓取一些数据并使用 FtpWebRequest 对象将其上传到 FTP 目录 - 非常典型。
当我使用调试器单步执行它时,我让它成功运行。文件正在使用正确的数据写入远程服务器。然后当我取出断点并让它撕裂时,它创建了没有数据的文件,然后挂起直到它最终超时。除了超时没有返回异常。我把断点放回去,果然它工作得很好。
我认为调试行为导致暂停并放入 Thread.Sleep(10),并且再次完美运行。
我很乐意对此进行解释(只要这不是糟糕的做法),但关于如何做得更好的建议也将不胜感激。我会注意到我只很少使用第 3 方控件。
编辑:我还应该提到我不想创建一个物理文件,我宁愿直接写流。
以下是相关代码:
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);
}
谢谢!