我正在开发一个RSS阅读器,当我向服务器发送请求并获得响应时,我会将响应加载到xml文档中。当文档加载时,它会抛出异常,这将阻止我的应用程序编译和运行。
引发的异常文本:远程服务器返回一个错误:(500)内部服务器错误。除了这个例外,它都在踢我的头。任何人都可以解释为什么会发生这种情况,以及如何处理。
从这里我调用Rss阅读器mehtod:
private static string[,] rssData;
rssData = Rss_read("http://bbc.com/news");Rss阅读器方法的cod是:
private static String[,] Rss_read(string connection)
{
WebRequest feedRqst = WebRequest.Create(connection);
WebResponse feedRspns = feedRqst.GetResponse();
Stream rssStream = feedRspns.GetResponseStream(); // Returning the feed stream;
XmlDocument rssxmlDoc = new XmlDocument();
rssxmlDoc.Load(rssStream); ///statement which return exception;
XmlNodeList rssItme = rssxmlDoc.SelectNodes("rss/ chanel/item");
string[,] feedData = new string[40, 3];
for (int i = 0; i < rssItme.Count; i++)
{
XmlNode rssNod;
rssNod = rssItme.Item(i).SelectSingleNode("title"); // title of feed
if (rssNod != null)
{
feedData[i, 0] = rssNod.InnerText;
}
else
{
feedData[i, 0] = "";
}
rssNod = rssItme.Item(i).SelectSingleNode("descryption"); // decryption of feed;
if (rssNod != null)
{
feedData[i, 1] = rssNod.InnerText;
}
else
{
feedData[i, 1] = "";
}
rssNod = rssItme.Item(i).SelectSingleNode("link"); // link to the specific title in the feed;
if (rssNod != null)
{
feedData[i, 2] = rssNod.InnerText;
}
else
{
feedData[i, 2] = "";
}
} // End of for loop;
return feedData;
} // End of rss_feed method;发布于 2014-04-03 06:16:35
相反,尝试WebClient,使用起来要容易得多:
private static String[,] Rss_read(string connection)
{
string[,] feedData = new string[40, 3];
WebClient client = new WebClient();
XmlDocument rssxmlDoc = new XmlDocument();
string downloadString = client.DownloadString(connection);
rssxmlDoc.LoadXml(downloadString); ///statement which return exception;
XmlNodeList rssItme = rssxmlDoc.SelectNodes("rss/ chanel/item");
for (int i = 0; i < rssItme.Count; i++)
{
// Your logic here
}
return feedData;
}至于为什么您要得到500个错误,我猜您使用的XmlDocument.Load()方法不具备web客户端的全部功能,因此它不能很好地处理来自目标URL的cookie和301/302重定向。见下文:

发布于 2014-04-03 11:19:17
解决方案1:您所请求的url http://bbc.com/news没有返回XML。因此,通过XmlDocument.Load阅读它会引起问题。请使用StreamReader处理您的案件。有点像
private static string[,] Rss_read(string connection)
{
WebRequest feedRqst = WebRequest.Create(connection);
WebResponse feedRspns = feedRqst.GetResponse();
Stream rssStream = feedRspns.GetResponseStream(); // Returning the feed stream;
StreamReader sr = new StreamReader(rssStream);
while (!sr.EndOfStream)
{
//Do some logic
}
}解决方案2我注意到http://bbc.com/news的Rss源在这个URL http://feeds.bbci.co.uk/news/rss.xml中
将此URL作为参数更新为Rss_read方法,这将有效。像这样
rssData = Rss_read("http://feeds.bbci.co.uk/news/rss.xml");https://stackoverflow.com/questions/22828200
复制相似问题