httpwebrequest GET在连接丢失时重试

时间:2015-06-11 18:21:05

标签: c# asp.net-web-api

我的应用程序使用httpwebrequest从我的WebAPI获取某些信息。我尝试做的是在连接丢失或根本没有连接的情况下重试请求。

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.");
                } 

有任何建议吗?

1 个答案:

答案 0 :(得分: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");

            }
         }
相关问题