2009-04-09 51 views
1

我一直在做一個小項目上,並關閉了一段時間,我覺得我是接近,但它有「問題」。我們的想法是FTP文件到一個第三方,他們處理它和5-10分鐘後,他們產生一個結果集,它需要得到下載,並在我們這邊處理。的AsyncCallback在.NET網頁逃跑

因此,代碼可能有點簡單,它只是一些我拼湊

 
      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的一部分是垃圾郵件的遠程端,我設法使他們(或至少我們的特定連接)崩潰。

它的任何想法,將不勝感激...... needly說我有點需要得到權利過程中固定的,因爲我們的交易員會有點不高興,當他們不能工作,彭博變得有點煩躁的時候,他們必須花3小時以上,試圖解決它:(

感謝!

回答

1

我guesing你的代碼頂部塊是在Page_Load處理?且行

ftp.Upload(fn); 

導致了問題?如果是這樣,我會說你的用戶正在重新加載e頁面,所以這比以前更頻繁地被調用。

你在右邊線看異步模式,但它聽起來像你需要警惕,人們刷新頁面太多的情況。

+0

現在我在一個空白頁測試它,我只是用在Page_Load處理程序來啓動它,沒有什麼刷新。也許我會把它從那裏拿走,然後把它從別的地方踢出去,只是爲了排除它。謝謝。 – 2009-04-09 19:54:56