【发布时间】:2017-02-07 22:51:41
【问题描述】:
我有一个带有 .JSON 文件的动态页面,并且我使用我的 C# 程序每隔 x 秒访问一次,以确定是否已更改某些内容。只要我有互联网连接,一切都会完美无缺,如果由于某种原因我失去了它,那么我的程序会因为 ex.Response 为空而崩溃。我想知道是否有更好的方法来处理以下代码:
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函数?
编辑:
添加后
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,它在世界上的优先级很低,其次,即使它确实 ping,它也不能保证 web 响应.. 答案是更好地处理你的错误 - 你显然没有在某处检查您的数据是否存在或您的程序不会崩溃
-
理想情况下,我认为它应该在尝试从中读取数据之前检查页面是否可用。在无端循环中的 void Function() 中某处。我试过了,但仍然没有 bool RemoteWebOnline(string url) { WebRequest request = WebRequest.Create(url); Web响应响应;尝试 { 响应 = request.GetResponse(); Console.WriteLine("网页响应:"+response);返回真; } 捕捉 { 返回错误; } }
标签: c# json visual-studio