2015-06-11 69 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"); 

      } 
     }