我一直在断断续续地从事一个小项目,我想我已经接近了,但它有“问题”。我们的想法是将文件通过 FTP 传输到第 3 方,他们对其进行处理,并在 5-10 分钟后生成一个结果集,该结果集需要在我们这边下载和处理。
所以代码可能有点简单,只是我拼凑的东西
如果(!Page.IsPostBack) { 字符串 baseLocation = "C:\\temp\\"; 字符串 fn = baseLocation +“fxxxupld.inc”; ftp = new FtpClient(FTPServer, FTPUserName, FTPPassword); ftp.登录(); ftp.上传(fn); AsyncCallback 回调 = new AsyncCallback(CloseConnection); ftp.ChangeDir("结果"); 字符串[] 文件 = ftp.GetBloombergUploadList(); int CHigh = Files.GetUpperBound(0); 字符串最新文件 = CheckForNewFile(CHigh, ftp); ftp.BeginDownload(LatestFile, "c:\\temp\\Results.txt", 回调); } 私有静态字符串 CheckForNewFile(int CHigh,FtpClient ftp) { int NHigh = 0; 字符串最新文件 = ""; 而(CHigh >= NHigh) { 字符串[] 文件 = ftp.GetBloombergUploadList(); NHigh = Files.GetUpperBound(0); 最新文件 = 文件[NHigh-1].ToString(); 线程.睡眠(3000); } 返回最新文件; } 私人无效关闭连接(IAsyncResult 结果) { Debug.WriteLine("文件下载:" + result.IsCompleted.ToString()); if (ftp != null) ftp.Close(); ftp =空; }
很简单,向上推文件,获取当前处理的文件列表,等待并经常检查,当出现新文件时,下载它。
在我添加 AsyncCallback 之前,该过程运行良好,除了用户在页面返回之前无法执行任何操作,并且我无法显示任何类型的进度指示器等。突然添加 AsyncCallback 后,UPLOAD 部分是向远端发送垃圾邮件,我设法使它们崩溃(或至少我们的特定连接)。
对此的任何想法将不胜感激......需要说我有点需要修复这个过程,因为我们的交易员在他们无法工作时会有点不安,而彭博社在他们不得不花费 3 多个小时时会有点不安试图解决它:(
谢谢!