0

我有一个小型控制台应用程序,它抓取一些数据并使用 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);
        }

谢谢!

4

1 回答 1

0

尝试手动关闭它。

reqStream.Close(); // Close

如果这没有帮助,您可以尝试从服务器获取响应。

GetResponse(); 

资源:

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.getrequeststream(v=vs.110).aspx

编辑:

我知道,using关键字有时不能正确关闭连接。

于 2013-11-14T15:08:47.007 回答