AsyncCallback в веб-странице .net убежать - PullRequest
1 голос
/ 09 апреля 2009

Я некоторое время работал над небольшим проектом и думаю, что я близок, но у него есть «проблемы». Идея состоит в том, чтобы отправить файл по FTP сторонним организациям, которые обрабатывают его и через 5-10 минут генерируют набор результатов, который необходимо загрузить и обработать на нашей стороне.

Так что код может быть немного простым, это просто то, что я собрал вместе

            if (!Page.IsPostBack)
            {
                string baseLocation = "C:\\temp\\";
                string fn = baseLocation + "fxxxupld.inc";

                ftp = new FtpClient(FTPServer, FTPUserName, FTPPassword);
                ftp.Login();
                ftp.Upload(fn);

                AsyncCallback callback = new AsyncCallback(CloseConnection);

                ftp.ChangeDir("results");
                string[] Files = ftp.GetBloombergUploadList();
                int CHigh = Files.GetUpperBound(0);
                String LatestFile = CheckForNewFile(CHigh, ftp);
                ftp.BeginDownload(LatestFile, "c:\\temp\\Results.txt", callback);
            }

        private static string CheckForNewFile(int CHigh,FtpClient ftp)
        {
            int NHigh = 0;
            string LatestFile = "";
            while (CHigh >= NHigh)
            {
                string[] Files = ftp.GetBloombergUploadList();
                NHigh = Files.GetUpperBound(0);
                LatestFile = Files[NHigh-1].ToString();
                Thread.Sleep(3000);
            }
            return LatestFile;
        }

        private void CloseConnection(IAsyncResult result)
        {
            Debug.WriteLine("File downloaded: " + result.IsCompleted.ToString());
            if (ftp != null) ftp.Close();
            ftp = null;
        } 

Довольно просто, нажмите файл вверх, получите список обрабатываемых в данный момент файлов, подождите и проверяйте время от времени, а когда появится новый файл, загрузите его.

До того, как я добавил AsyncCallback, процесс работал нормально, за исключением того, что пользователь не мог ничего сделать, пока страница не вернулась, и я не смог отобразить какой-либо индикатор прогресса и т. Д. После внезапного добавления AsyncCallback Часть UPLOAD является спамом на удаленном конце, и мне удалось их аварийно завершить (или, по крайней мере, наше конкретное соединение).

Любые мысли по этому поводу были бы оценены ... необходимо сказать, что мне нужно как-то исправить процесс, потому что наши трейдеры немного расстраиваются, когда они не могут работать, а Bloomberg немного расстраивается, когда им приходится тратить 3+ часа, пытаясь ее решить: (

спасибо!

1 Ответ

1 голос
/ 09 апреля 2009

Я предполагаю, что ваш главный кусок кода находится в обработчике Page_Load? И линия

 ftp.Upload(fn);

Является ли причиной проблемы? Если это так, я бы сказал, что ваши пользователи перезагружали страницу, так что это вызывается гораздо чаще, чем раньше.

Вы находитесь на правильных линиях, чтобы посмотреть на асинхронные шаблоны, но, похоже, вам нужно остерегаться случая, когда люди слишком много обновляют страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...