Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确处理Web请求_C#_Json_Visual Studio - Fatal编程技术网

C# 正确处理Web请求

C# 正确处理Web请求,c#,json,visual-studio,C#,Json,Visual Studio,我有一个带有.JSON文件的动态页面,我使用我的C#程序每隔x秒访问一次,以确定是否有更改。只要我有网络连接,任何东西都可以完美地工作,如果出于任何原因我丢失了它,那么我的程序就会崩溃,因为前响应是空的。我想知道是否有更好的方法来处理以下代码: void Function(){ while(true){ jList = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<jsonList>(G

我有一个带有.JSON文件的动态页面,我使用我的C#程序每隔x秒访问一次,以确定是否有更改。只要我有网络连接,任何东西都可以完美地工作,如果出于任何原因我丢失了它,那么我的程序就会崩溃,因为前响应是空的。我想知道是否有更好的方法来处理以下代码:

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;
        }
    }
并将其用作

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);
}}
void函数(){
while(true){
如果(!getResponse(jsonUrl))
{
返回;
}
jList=new System.Web.Script.Serialization.JavaScriptSerializer();
//我用上面的数据做了一些事情
睡眠(5000);
}}
我的C#应用程序稍等片刻,然后正常退出。为什么?


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

好的,这对我来说似乎工作正常

  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);

                }

            }


        }

ping不能保证其ICMP,它在世界上的优先级较低。其次,即使它进行了ping,也不能保证web响应。。答案是更好地处理您的错误-您显然没有检查您的数据是否存在,或者您的程序不会崩溃。我认为在尝试读取数据之前,它应该检查页面是否可用。在无端点循环的void函数()中的某个位置。我尝试了这个,但仍然没有bool RemoteWebOnline(字符串url){WebRequest request=WebRequest.Create(url);WebResponse响应;try{response=request.GetResponse();Console.WriteLine(“Web响应:+response”);返回true;}catch{return false;}}
  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;
        }
    }