Я некоторое время работал над небольшим проектом, и я думаю, что я близок, но у него есть «проблемы». Идея состоит в том, чтобы передать файл по 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+ часа пытаюсь решить :(
Благодарность!