【问题标题】:Properly handle WebRequests正确处理 WebRequest
【发布时间】:2017-02-07 22:51:41
【问题描述】:

我有一个带有 .JSON 文件的动态页面,并且我使用我的 C# 程序每隔 x 秒访问一次,以确定是否已更改某些内容。只要我有互联网连接,一切都会完美无缺,如果由于某种原因我失去了它,那么我的程序会因为 ex.Response 为空而崩溃。我想知道是否有更好的方法来处理以下代码:

void Function(){
while(true){
 jList = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<jsonList>(GET(jsonUrl)); 
//SOME THINGS I DO with the data above here

Thread.Sleep(5000);
}}



     string GET(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        try
        {
            WebResponse response = request.GetResponse();
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
        }
        catch (WebException ex)
        {
            WebResponse errorResponse = ex.Response;
            if (ex.Response != null) { 
            using (Stream responseStream = errorResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                String errorText = reader.ReadToEnd();
                // log errorText
            }
        }
            throw;
        }
    }

或许我应该先ping一下,看看有没有回复,然后才执行WebRequest函数?

编辑:

添加后

  public bool getResponse(string URL)
        {
            try
            {
                WebClient wc = new WebClient();
                string HTMLSource = wc.DownloadString(URL);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

并将其用作

void Function(){
while(true){
        if (!getResponse(jsonUrl))
                {
                    return;
                }
 jList = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<jsonList>(GET(jsonUrl)); 
//SOME THINGS I DO with the data above here

Thread.Sleep(5000);
}}

我的 C# 应用程序稍等片刻,然后正常退出。为什么?

程序“[10476] Kiosk2.vshost.exe”已退出,代码为 0 (0x0)。

【问题讨论】:

  • ping 不能保证它的 ICMP,它在世界上的优先级很低,其次,即使它确实 ping,它也不能保证 web 响应.. 答案是更好地处理你的错误 - 你显然没有在某处检查您的数据是否存在或您的程序不会崩溃
  • 理想情况下,我认为它应该在尝试从中读取数据之前检查页面是否可用。在无端循环中的 void Function() 中某处。我试过了,但仍然没有 bool RemoteWebOnline(string url) { WebRequest request = WebRequest.Create(url); Web响应响应;尝试 { 响应 = request.GetResponse(); Console.WriteLine("网页响应:"+response);返回真; } 捕捉 { 返回错误; } }

标签: c# json visual-studio


【解决方案1】:

好吧,这对我来说似乎工作得很好。

  public void Update() //CALLED IT void FUNCTION earlier
        {

            while (true)
            {
                while (getResponse(jsonUrl))
                {


                    jList = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<jsonList>(GET(jsonUrl));

 //I DO SOME STUFF HERE
 //INTERESTING STUFF


                    Thread.Sleep(5000);

                }

            }


        }

和秒功能:

public bool getResponse(string URL)
    {
        try
        {
            WebClient wc = new WebClient();
            string HTMLSource = wc.DownloadString(URL);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多