2009-04-09 7 views
1

Ich habe an einem kleinen Projekt an und ab für eine Weile gearbeitet und ich denke, ich bin in der Nähe, aber es hat "Probleme". Die Idee besteht darin, eine Datei an eine dritte Partei zu übertragen, sie zu verarbeiten und 5-10 Minuten später eine Ergebnismenge zu generieren, die auf unserer Seite heruntergeladen und verarbeitet werden muss.AsyncCallback in .net Website weggelaufen

So ist der Code könnte ein wenig einfach sein, es ist nur etwas, das ich zusammen

 
      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; 
     } 

Ziemlich einfach gepflastert, drücken Sie die Datei auf, um eine Liste der aktuell bearbeiteten Dateien erhalten, warten und jeden überprüfen, so oft und Wenn eine neue Datei angezeigt wird, laden Sie sie herunter.

Bevor ich den AsyncCallback einfügte, funktionierte der Prozess gut, außer dass der Benutzer nichts tun konnte, bis die Seite zurückgegeben wurde und ich keine Fortschrittsanzeige usw. anzeigen konnte. Nach dem Hinzufügen des AsyncCallbacks der UPLOAD-Teil spammt das entfernte Ende und ich schaffte es, sie (oder zumindest unsere spezielle Verbindung) zum Absturz zu bringen.

Irgendwelche Gedanken dazu würden geschätzt werden ... needly zu sagen, dass ich irgendwie den Prozess richtig beheben muss, weil unsere Händler ein wenig verärgert werden, wenn sie nicht arbeiten können, und Bloomberg bekommt ein wenig verärgert, wenn sie müssen verbringen Stunden 3+ versuchen, es zu lösen :(

dank!

Antwort

1

ich guesing Ihr Top-Stück Code ist in den Page_Load Handler? Und die Linie

ftp.Upload(fn); 

das Problem verursacht? Wenn das der Fall ist, würde ich sagen, dass Ihre Nutzer diesen Laden nachgeladen haben Die Seite wird also öfter aufgerufen als vorher.

Sie sind auf der richtigen Linie, um asynchrone Muster zu sehen, aber es klingt wie Sie vor dem Fall schützen müssen, wo die Leute die Seite zu sehr aktualisieren.

+0

Ich teste es gerade in einer leeren Seite, ich benutze nur den Page_Load-Handler, um es zu starten, gibt es nichts zu aktualisieren. Vielleicht nehme ich es raus und kicke es irgendwo anders hin, nur um es auszuschließen. Vielen Dank. –

+0

Wenn Sie das Problem mit einem wirklich einfachen Beispiel reproduzieren können, könnte es sich lohnen, das Codebeispiel zu bearbeiten. –

Verwandte Themen