我们公司的网站首页、频道首页静态化策略是这样的:
一个服务ServiceA每5分钟会对配置好的网站首页、频道首页源地址分别发起一次请求,然后把请求的数据写入一个Html文档,这个Html文档即静态化的页面。
本来一直工作的很正常,但今天我使用了自定义的500错误页面后出问题了,首页静态页面不定时地呈现出了我自定义的500错误页面,经分析,发现原来没有使用自定义错误页面时,WebResponse的返回结果是一个错误,可以被捕捉到;但使用了自定义错误页面后,WebResponse就把这个错误页面当成了首页的内容了。
接下来就是改进ServiceA了,在获得WebResponse的内容之前先判断返回的HttpStatusCode,只有是200时才返回页面内容,否则返回一个空字符串,附部分代码:
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(SourceUrl);
wr.Timeout = 20000; // 20秒
HttpWebResponse wResponse = (HttpWebResponse)wr.GetResponse();
if (wResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader sr = new StreamReader(wResponse.GetResponseStream(), System.Text.Encoding.GetEncoding(Encodeing));
strContent = sr.ReadToEnd();
}
wr.Timeout = 20000; // 20秒
HttpWebResponse wResponse = (HttpWebResponse)wr.GetResponse();
if (wResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader sr = new StreamReader(wResponse.GetResponseStream(), System.Text.Encoding.GetEncoding(Encodeing));
strContent = sr.ReadToEnd();
}
在如何获得Http请求的状态代码时颇费一番周折,后来发现WebResponse类是没有 StatusCode 属性的,只有继承于它的HttpWebResponse类才有;另外,HttpWebRequest.GetResponse 返回的类型竟然不是HttpWebResponse,而是WebResponse,难道HttpWebResponse.GetResponse 还会返回非Http的Response?如果有朋友有答案,感谢分享。