2009-04-09 6 views
1

Je travaille sur un petit projet depuis un certain temps et je pense que je suis proche, mais il a des «problèmes». L'idée est de transférer un fichier à un tiers, ils le traitent et 5 à 10 minutes plus tard, ils génèrent un ensemble de résultats qui doit être téléchargé et traité de notre côté.AsyncCallback dans la page Web .net s'enfuir

Ainsi, le code peut être un peu simple, il est juste quelque chose que je bricolé

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

Assez simple, appuyez sur le fichier up, obtenir une liste des fichiers en cours de traitement, attendre et vérifier chaque si souvent et quand un nouveau fichier apparaît, téléchargez-le. Avant d'ajouter l'AsyncCallback, le processus a bien fonctionné, sauf que l'utilisateur ne pouvait rien faire jusqu'à ce que la page revienne et que je ne puisse plus afficher aucun indicateur de progression, etc. Après avoir ajouté AsyncCallback tout à coup la partie UPLOAD spammait l'extrémité distante et j'ai réussi à les bloquer (ou du moins notre connexion particulière). Tout commentaire sur ce point serait apprécié ... besoin de dire que j'ai besoin de régler le processus correctement parce que nos commerçants sont un peu contrariés quand ils ne peuvent pas travailler et Bloomberg se fâche quand ils doivent passer 3+ heures à essayer de le résoudre :(

merci!

Répondre

1

Je guesing votre morceau haut de code est dans le gestionnaire Page_Load? Et la ligne

ftp.Upload(fn); 

est à l'origine du problème? Si oui, je dirais que vos utilisateurs rechargeaient e page, donc cela s'appelle beaucoup plus souvent qu'avant.

Vous êtes sur la bonne voie pour regarder des modèles asynchrones, mais il semble que vous ayez besoin de vous prémunir contre les cas où les gens rafraichiraient trop la page.

+0

maintenant je le teste dans une page blanche, j'utilise simplement le gestionnaire Page_Load pour le lancer, il n'y a rien à rafraîchir. Peut-être que je vais le sortir de là et le lancer ailleurs, juste pour l'exclure. Merci. –

+0

Si vous pouvez reproduire le problème avec un exemple très simple, il peut être utile de modifier votre exemple de code. –

Questions connexes