我一直在断断续续地从事一个小项目,我想我已经接近了,但它有“问题”。我们的想法是将文件通过 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 多个小时时会有点不安试图解决它:(
谢谢!