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