私は小規模なプロジェクトのオンとオフをしばらく続けています。私は近いと思いますが、それには「問題」があります。アイデアは、ファイルを第三者にFTPで送信し、処理し、5〜10分後にダウンロードして処理する必要がある結果セットを生成することです。.net WebページのAsyncCallbackが逃げる
のでコードは、現在処理されたファイルの一覧を取得するまで待機し、そう頻繁にすべてのを確認し、ファイルを押し上げ、それは私が一緒に
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を追加する前に、ページが返されるまでユーザが何もできなかったことを除いて、プロセスは正常に機能しました。何らかの進捗インジケータなどを表示できませんでした。 UPLOADの部分がリモートエンドをスパムしており、私はそれらをクラッシュさせました(少なくとも私たちの特定の接続)。
私のトレーダーは仕事ができないときには少し動揺し、ブルームバーグは少し動揺してしまうので、私はプロセスを正しいものにする必要があると言いますPage_Load
ハンドラであるか、そしてライン
ftp.Upload(fn);
が問題を引き起こしている?それを解決しようとする時間:(
感謝!
今私は空白のページでそれをテストしています、私はちょうどそれをキックするPage_Loadハンドラを使用しています、更新するものは何もありません。たぶん、私はそこから取り出して、どこか他の場所から蹴り出して、それを排除するだけです。ありがとう。 –
本当に簡単な例で問題を再現できる場合は、コードサンプルを編集する価値があります。 –