首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# Rss应用程序内部服务器错误500

C# Rss应用程序内部服务器错误500
EN

Stack Overflow用户
提问于 2014-04-03 04:57:57
回答 2查看 663关注 0票数 0

我正在开发一个RSS阅读器,当我向服务器发送请求并获得响应时,我会将响应加载到xml文档中。当文档加载时,它会抛出异常,这将阻止我的应用程序编译和运行。

引发的异常文本:远程服务器返回一个错误:(500)内部服务器错误。除了这个例外,它都在踢我的头。任何人都可以解释为什么会发生这种情况,以及如何处理。

从这里我调用Rss阅读器mehtod:

代码语言:javascript
运行
复制
private static string[,] rssData;
rssData = Rss_read("http://bbc.com/news");

Rss阅读器方法的cod是:

代码语言:javascript
运行
复制
      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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 06:16:35

相反,尝试WebClient,使用起来要容易得多:

代码语言:javascript
运行
复制
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重定向。见下文:

票数 1
EN

Stack Overflow用户

发布于 2014-04-03 11:19:17

解决方案1:您所请求的url http://bbc.com/news没有返回XML。因此,通过XmlDocument.Load阅读它会引起问题。请使用StreamReader处理您的案件。有点像

代码语言:javascript
运行
复制
    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方法,这将有效。像这样

代码语言:javascript
运行
复制
rssData = Rss_read("http://feeds.bbci.co.uk/news/rss.xml");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22828200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档