2017-02-07 11 views
0

私は.JSONファイルの動的ページを持っています。何か変更されているかどうかを判断するために、C#プログラムを使用してx秒ごとにアクセスしています。どんな理由であれ私がそれを失った場合、ex.Responseがnullなので私のプログラムがクラッシュするならば、インターネット接続がある限り、すべてが完璧に動作します。WebRequestsを正しく処理する

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クラスの機能を実行する必要があります。次のコードを処理するより良い方法があるのか​​と思いまして?

EDIT:

この

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)で終了しました。

+0

pingがそのICMPをguaranteeedされていない、それがpingをした場合でも、それはウェブ応答を保証does notの、第二に、世界では優先度が低いです。..答えはあなたのエラーをうまく処理することです - あなたは明らかにあなたのデータがそこにあるか、あなたのプログラムがクラッシュしないかをチェックしません。 – BugFinder

+0

理想的には、ページがデータを読み込もうとする前に利用可能かどうかチェックするべきだと思います。 end-lessループのvoid()関数内のどこかにあります。私はこれを試しましたが、まだそこにはありません。 bool RemoteWebOnline(文字列url) { WebRequest request = WebRequest.Create(url); WebResponseレスポンス。 try { レスポンス= request.GetResponse(); Console.WriteLine( "Web response:" + response); がtrueを返します。 } catch { falseを返します。 } } –

答えて

0

申し訳ありませんが、これは私にとってはうまくいくようです。

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; 
     } 
    } 
関連する問題