私はいくつかのデータをスクレイピングし、FtpWebRequest オブジェクトを使用して FTP ディレクトリにアップロードする小さなコンソール アプリを持っています - 非常に典型的です。
デバッガーでステップ実行している間、正常に動作しました。ファイルは正しいデータでリモート サーバーに書き込まれていました。次に、ブレークポイントを取り出してリッピングすると、データのないファイルが作成され、最終的にタイムアウトするまでハングしました。タイムアウト以外の例外は返されませんでした。ブレークポイントを元に戻しましたが、完全に機能しました。
デバッグの行為が一時停止を引き起こしていると考え、Thread.Sleep(10) を入れたところ、再び完全に機能しました。
これについての説明だけで満足しますが(ひどい慣習でない限り)、より良い方法についての提案もいただければ幸いです。サードパーティ製のコントロールは控えめにしか使用していないことに注意してください。
編集:物理ファイルを作成する必要はなく、ストリームを直接書き込むだけでよいことにも言及する必要があります。
関連するコードは次のとおりです。
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);
}
ありがとう!