2017-02-07 1 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; 
     } 
    } 

은 아마도 내가 먼저 핑, 나는 응답을 얻을 수 있는지, 오직 다음 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)으로 종료되었습니다.

+0

핑은, 그것이 핑 (ping)을 한 경우에도, 그것은 웹 응답을 보장 나던, 둘째, 세계에 낮은 우선 순위를 가지고 있습니다 .. 대답은 오류를 더 잘 처리하는 것입니다 - 분명히 어딘가에 데이터가 있거나 프로그램이 충돌하지 않는 것을 확인하지 못합니다. – BugFinder

+0

이상적으로는 페이지가 데이터를 읽으려고 시도하기 전에 사용 가능한지 확인해야한다고 생각합니다. 어딘가에 무효 함수()에서 끝이없는 루프. 나는 이것을 시도했지만 아직 거기에 있지 않다. bool RemoteWebOnline (문자열 url) { WebRequest request = WebRequest.Create (url); WebResponse 응답; 시도하십시오 { 응답 = request.GetResponse(); Console.WriteLine ("웹 응답 :"+ 응답); return 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); 

       } 

      } 


     } 

그리고 초 기능 : 그 ICMP를 guaranteeed되지

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