2015-06-11 91 views
0

我的應用程序使用httpwebrequest從我的WebAPI獲取某些信息。我試圖做的是重試請求,如果連接丟失或根本沒有連接。httpwebrequest當連接丟失時GET重試

public static string httpsGET(string passedweburi, string BCO) 
     { 
      string content = ""; 
      //GET method 
      HttpWebRequest HttpRequest = (HttpWebRequest)WebRequest.Create(passedweburi + BCO); 
      HttpRequest.Method = "GET"; 
      //Response 
      HttpWebResponse response = (HttpWebResponse)HttpRequest.GetResponse(); 

      StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); 
      content = sr.ReadToEnd();    

      string resp = content.TrimStart('[').TrimEnd(']').TrimStart('"').TrimEnd('"'); 
       if (resp == "\"The request is invalid.\"") 
       { 
        return "VALIDATE Me"; 
       } 
       else 
       { 
        return resp; 
       } 
     } 

它通常停止在響應變量然後將引發從調用此方法,不存在連接的方法中的異常。我正在考慮製作一個while循環,讓倒計時重新連接大概一個小時。這樣的事情:

int rt = 0; 
      while (rt < 60) 
      { 
       if (resp == "\"Unable to connect to the remote server.\"") 
       { 
        Console.Writeline("Connection Timed Out"); 
        Console.Writeline("Re-establishing connection..."); 

        DateTime startTime = DateTime.Now; 
        while (true) 
        { 
         if (DateTime.Now.Subtract(startTime).TotalMilliseconds > 60000) 
          break; 
        } 
        rt++; 
        Console.Writeline("Retrying " + rt.ToString() + " times"); 

       } 

       if (rt >= 60) 
       { 
        Console.Writeline("Failed to reconnect."); 
       } 

任何意見?

回答

0
//this is by no means pretty, but im using your code verbatim 

` public static string httpsGET(string passedweburi, string BCO) 
    { 
     string content = ""; 
     //GET method 
     HttpWebRequest HttpRequest = (HttpWebRequest)WebRequest.Create(passedweburi + BCO); 
     HttpRequest.Method = "GET"; 
     //Response 

     try 
     { 
     HttpWebResponse response = (HttpWebResponse)HttpRequest.GetResponse(); 
     } 
     catch(Exception ex) 
     { 
      return "failed"; 
     } 

     StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); 
     content = sr.ReadToEnd();    

     string resp = content.TrimStart('[').TrimEnd(']').TrimStart('"').TrimEnd('"'); 
      if (resp == "\"The request is invalid.\"") 
      { 
       return "VALIDATE Me"; 
      } 
      else 
      { 
       return resp; 
      } 
    } 


//calling your method 
     string resp = ""; 
     while (rt < 60) 
     { 
      if (rt >= 60) 
      { 
       Console.Writeline("Failed to reconnect."); 
      } 
      resp = YourStaticObj.httpsGET("http://bla","bco") 

      if (resp == "failed") 
      { 
       Console.Writeline("Connection Timed Out"); 
       Console.Writeline("Re-establishing connection..."); 

       DateTime startTime = DateTime.Now; 
       System.Threading.Thread.Sleep(60000); 
       Console.Writeline("Retrying " + rt.ToString() + " times"); 

      } 
     }