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)で終了しました。
pingがそのICMPをguaranteeedされていない、それがpingをした場合でも、それはウェブ応答を保証does notの、第二に、世界では優先度が低いです。..答えはあなたのエラーをうまく処理することです - あなたは明らかにあなたのデータがそこにあるか、あなたのプログラムがクラッシュしないかをチェックしません。 – BugFinder
理想的には、ページがデータを読み込もうとする前に利用可能かどうかチェックするべきだと思います。 end-lessループのvoid()関数内のどこかにあります。私はこれを試しましたが、まだそこにはありません。 bool RemoteWebOnline(文字列url) { WebRequest request = WebRequest.Create(url); WebResponseレスポンス。 try { レスポンス= request.GetResponse(); Console.WriteLine( "Web response:" + response); がtrueを返します。 } catch { falseを返します。 } } –