2009-04-09 6 views
1

私は小規模なプロジェクトのオンとオフをしばらく続けています。私は近いと思いますが、それには「問題」があります。アイデアは、ファイルを第三者に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); 

が問題を引き起こしている?それを解決しようとする時間:(

感謝!

答えて

1

私は、コードのあなたのトップチャンクをguesingよ3+過ごしますかもしそうなら、あなたのユーザーがeページであるため、以前よりも頻繁に呼び出されています。

あなたは非同期パターンを見るのに正しい行にありますが、人がページをあまりにも多くリフレッシュするケースを防ぐ必要があるようです。

+0

今私は空白のページでそれをテストしています、私はちょうどそれをキックするPage_Loadハンドラを使用しています、更新するものは何もありません。たぶん、私はそこから取り出して、どこか他の場所から蹴り出して、それを排除するだけです。ありがとう。 –

+0

本当に簡単な例で問題を再現できる場合は、コードサンプルを編集する価値があります。 –

関連する問題