httpwebrequest дает время ожидания до перезапуска - PullRequest
0 голосов
/ 29 апреля 2011

Я работаю над настольным приложением, разработанным в C # (среда .NET).

Это приложение подключается к удаленному серверу, используя HttpWebRequest . Если по какой-либо причине мой компьютер отключен от Интернета, и я повторно подключаю его, мое приложение всегда выдает время ожидания запроса для HttpWebRequest до тех пор, пока я не перезапущу все свое приложение и не добавлю новый поток в свое приложение после сети д / к он отлично работает.

Есть ли способ перезагрузить мою сеть, или кто-нибудь может сказать мне, как это работает?

// мой код ..

public String request(String add, String post, int time, String reff, int id, int rwtime)
    {
        try
        {
            if (rwtime == 0)
            {
                rwtime = 100000;
            }
            string result = "";
            string location = "";
            // Create the web request
            HttpWebRequest req = WebRequest.Create(add) as HttpWebRequest;
            req.ReadWriteTimeout = rwtime;
            req.KeepAlive = true;
            req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
            req.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Timeout = time;
            req.Referer = reff;
            req.AllowAutoRedirect = false;
            req.CookieContainer = statictk.cc[id];
            req.PreAuthenticate = true;
            if (post != "")
            {
                req.Method = "POST";
                string postData = post;
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] byte1 = encoding.GetBytes(postData);
                // Set the content type of the data being posted.
                req.ContentType = "application/x-www-form-urlencoded";
                // Set the content length of the string being posted.
                req.ContentLength = byte1.Length;
                Stream newStream = req.GetRequestStream();
                newStream.Write(byte1, 0, byte1.Length);
                newStream.Close();
            }
            else
            {
                req.Method = "GET";
            }
            // Get response
            try
            {
                HttpWebResponse response = req.GetResponse() as HttpWebResponse;

                // Get the response stream
                location = response.GetResponseHeader("Location");
                if (location == "")
                {
                    Stream responseStream = response.GetResponseStream();
                    if (response.ContentEncoding.ToLower().Contains("gzip"))
                        responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
                    else if (response.ContentEncoding.ToLower().Contains("deflate"))
                        responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);

                    StreamReader reader = new StreamReader(responseStream, Encoding.Default);
                    // Read the whole contents and return as a string
                    result = reader.ReadToEnd();
                }
                else
                {
                    result = location;
                }
                response.Close();
                if (result == "") result = "retry";
                return result;
            }

            catch (Exception e)
            {
                log.store("errorinresponce", e.Message);
                if (statictd.status[id] != "removed")
                {
                    return "retry";
                }
                else
                {
                    return "error";
                }
            }
        }
        catch(Exception f)
        {
            log.store("Networkerrorretry", f.Message);
            if (f.Message == "The operation has timed out")
            {
                return "retry";
            }
            string ans = MessageBox.Show("There was a Network Error..Wish to Retry ?\nError msg : "+ f.Message, "Title", MessageBoxButtons.YesNo).ToString();
            if (ans == "Yes")
                return "retry";
            else
            {
                Invoketk.settxt(id, "Not Ready");
                return "error";
            }
        }
    }

1 Ответ

0 голосов
/ 29 апреля 2011

Похоже, что вашему приложению не хватает обработки ошибок.Отключение может произойти в любое время, и ваше приложение должно справиться с этим.Попробуйте окружить сетевой цикл оператором try-catch, а затем перехватить для различных типов исключений.В зависимости от того, какое исключение было сгенерировано, вы можете решить, будете ли вы повторно подключаться к серверу без вывода сообщений или хотите сгенерировать сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...