c# - Retry mechanism for downloading files -


i have created function find files on ftp folder.

    public static list<string> getfilelist(networkcredential credential, string ftpsite, string ftpfolder, string extension)     {         string lsoutput = "";         list<string> files = new list<string>();              //fetch ls             ftpwebrequest request = (ftpwebrequest)webrequest.create(@"ftp://" + ftpsite + ftpfolder);             request.credentials = credential;             request.usebinary = true;             request.enablessl = true;             request.method = webrequestmethods.ftp.listdirectory;             ftpwebresponse response = null;             response = (ftpwebresponse)request.getresponse();             stream responsestream = response.getresponsestream();             streamreader reader = new streamreader(responsestream);             lsoutput = reader.readtoend();             reader.close();             response.close();              preparelog("ls output while finding files:");             preparelog(lsoutput);           //parse ls         string[] lsoutputlines = lsoutput.trim().split(new string[] { environment.newline }, stringsplitoptions.removeemptyentries);         foreach (string lsoutputline in lsoutputlines)             files.add(lsoutputline);          //filter files         files = files.where(f => f.tolower().endswith(extension.tolower())).tolist();          preparelogandemail("total " + extension.tolower() + " files found: " + files.count, logmessagetype.simple);         return files;     } 

exception handling done @ place function being called. problem ftp faces issues(like timeout) , have rerun program.

i have been asked add 3 times retry mechanism , here did retry once.

    public static list<string> getfilelist(networkcredential credential, string ftpsite, string ftpfolder, string extension)     {         string lsoutput = "";         list<string> files = new list<string>();          try         {             //fetch ls             ftpwebrequest request = (ftpwebrequest)webrequest.create(@"ftp://" + ftpsite + ftpfolder);             request.credentials = credential;             request.usebinary = true;             request.enablessl = true;             request.method = webrequestmethods.ftp.listdirectory;             ftpwebresponse response = null;             response = (ftpwebresponse)request.getresponse();             stream responsestream = response.getresponsestream();             streamreader reader = new streamreader(responsestream);             lsoutput = reader.readtoend();             reader.close();             response.close();              preparelog("ls output while finding files:");             preparelog(lsoutput);         }         catch (exception ex)         {             preparelogandemail("first attempt failed: details: " + ex.message, logmessagetype.attemptfailed);             preparelogandemail("second attempt started" + ex.message, logmessagetype.simple);              //fetch ls             ftpwebrequest request = (ftpwebrequest)webrequest.create(@"ftp://" + ftpsite + ftpfolder);             request.credentials = credential;             request.usebinary = true;             request.enablessl = true;             request.method = webrequestmethods.ftp.listdirectory;             ftpwebresponse response = null;             response = (ftpwebresponse)request.getresponse();             stream responsestream = response.getresponsestream();             streamreader reader = new streamreader(responsestream);             lsoutput = reader.readtoend();             reader.close();             response.close();              preparelog("ls output while finding files(second attempt):");             preparelog(lsoutput);         }           //parse ls         string[] lsoutputlines = lsoutput.trim().split(new string[] { environment.newline }, stringsplitoptions.removeemptyentries);         foreach (string lsoutputline in lsoutputlines)             files.add(lsoutputline);          //filter files         files = files.where(f => f.tolower().endswith(extension.tolower())).tolist();          preparelogandemail("total " + extension.tolower() + " files found: " + files.count, logmessagetype.simple);         return files;     } 

now if have add 2 more tries, need sort of daiys chaining or there other cleaner option available ?

i go retry loop, below

you notice make use of bolean flag out of successfull download, or retries count terminate.

i go far changing last section check if download successfull, , notify user if not, maybe logging error messages.

    public static list<string> getfilelist(networkcredential credential, string ftpsite, string ftpfolder, string extension)     {         list<string> files = new list<string>();         int retries = 0;         int maxretries = 5;         bool downloaded = false;         string lsoutput = "";         while (!downloaded && retries < maxretries)         {             try             {                 lsoutput = "";                 //fetch ls                 ftpwebrequest request = (ftpwebrequest) webrequest.create(@"ftp://" + ftpsite + ftpfolder);                 request.credentials = credential;                 request.usebinary = true;                 request.enablessl = true;                 request.method = webrequestmethods.ftp.listdirectory;                 ftpwebresponse response = null;                 response = (ftpwebresponse) request.getresponse();                 stream responsestream = response.getresponsestream();                 streamreader reader = new streamreader(responsestream);                 lsoutput = reader.readtoend();                 reader.close();                 response.close();                  preparelog("ls output while finding files:");                 preparelog(lsoutput);                 downloaded = true;             }             catch (exception ex)             {                 retries++;             }         }           if (downloaded)         {             //parse ls             string[] lsoutputlines = lsoutput.trim().split(new string[] {environment.newline}, stringsplitoptions.removeemptyentries);             foreach (string lsoutputline in lsoutputlines)                 files.add(lsoutputline);              //filter files             files = files.where(f => f.tolower().endswith(extension.tolower())).tolist();              preparelogandemail("total " + extension.tolower() + " files found: " + files.count, logmessagetype.simple);             return files;         }         else         {             preparelogandemail("failed download file", logmessagetype.simple);             return null;         }     } 

Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -