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)으로 종료되었습니다.
핑은, 그것이 핑 (ping)을 한 경우에도, 그것은 웹 응답을 보장 나던, 둘째, 세계에 낮은 우선 순위를 가지고 있습니다 .. 대답은 오류를 더 잘 처리하는 것입니다 - 분명히 어딘가에 데이터가 있거나 프로그램이 충돌하지 않는 것을 확인하지 못합니다. – BugFinder
이상적으로는 페이지가 데이터를 읽으려고 시도하기 전에 사용 가능한지 확인해야한다고 생각합니다. 어딘가에 무효 함수()에서 끝이없는 루프. 나는 이것을 시도했지만 아직 거기에 있지 않다. bool RemoteWebOnline (문자열 url) { WebRequest request = WebRequest.Create (url); WebResponse 응답; 시도하십시오 { 응답 = request.GetResponse(); Console.WriteLine ("웹 응답 :"+ 응답); return true; } catch { false를 반환합니다. } } –