1

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

谢谢!

4

1 回答 1

1

我猜你的最重要的代码块在Page_Load处理程序中?和线

 ftp.Upload(fn);

是造成问题吗?如果是这样,我会说您的用户正在重新加载页面,所以这比以前更频繁地调用。

您在正确的路线上查看异步模式,但听起来您需要防止人们刷新页面过多的情况。

于 2009-04-09T18:43:20.207 回答