Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用Digg API和URI处理程序时出现未知错误(silverlight)_Xml_Silverlight_Api_Uri_Digg - Fatal编程技术网

Xml 使用Digg API和URI处理程序时出现未知错误(silverlight)

Xml 使用Digg API和URI处理程序时出现未知错误(silverlight),xml,silverlight,api,uri,digg,Xml,Silverlight,Api,Uri,Digg,在课堂上,我们必须按照教程创建一个silverlight网站,搜索DIGG中给定的主题。(以本教程为基础:) 我们必须使用以下代码从DIGG获取信息 private void buttonSearch_Click(object sender, RoutedEventArgs e) { string topic = textboxSearchTopic.Text; WebClient digg = new WebClient

在课堂上,我们必须按照教程创建一个silverlight网站,搜索DIGG中给定的主题。(以本教程为基础:)

我们必须使用以下代码从DIGG获取信息

    private void buttonSearch_Click(object sender, RoutedEventArgs e)
        {
            string topic = textboxSearchTopic.Text;

            WebClient digg = new WebClient();
            digg.DownloadStringCompleted +=
                              new DownloadStringCompletedEventHandler(digg_DownloadStringCompleted);
            digg.DownloadStringAsync(
                         new Uri("http://services.digg.com/1.0/story.getAll?count=10&topic="+topic)); 
}

void digg_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
            if (e.Error != null)
            {
                DisplayStories(e.Result);             
            }
}

private void DisplayStories(string xmlContent)
        {
            XDocument document = XDocument.Parse(xmlContent);

            var stories = from story in document.Descendants("story")
                          where story.Element("thumbnail")!=null
                          select new DiggStory
                         {
                             Id = (string)story.Attribute("id"),
                             Title = (string)story.Element("title"),
                             Description = (string)story.Element("description"),
                             ThumbNail = (string)story.Element("thumbnail").Attribute("src"),
                             HrefLink = (string)story.Attribute("link"),
                             NumDiggs = (int)story.Attribute("diggs")
                         };
         gridStories.ItemsSource = stories;
        }
当搜索按钮时,我们得到错误:

An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.

   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at System.Net.OpenReadCompletedEventArgs.get_Result()
   at DiggSample.Views.Search.Digg_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OpenReadOperationCompleted(Object arg)
我已经知道DiggAPI已经过时了,但我认为这个错误与此无关。(我们甚至得到了一个本地XML文件,我们可以使用它,但它仍然不起作用)

我不知道是什么原因造成的,我们也没有从老师那里得到太多的帮助,所以我希望有人能帮助我们

谢谢,
托马斯

对于本节代码:

if (e.Error != null)
{
    DisplayStories(e.Result);             
}
你是说如果e.Error不为null,则显示故事。我想您应该将条件切换为
e.Error==null
,因为这意味着没有错误,使用结果是安全的。您可能希望在条件处放置一个断点,以检查
e.Error
的值,查看是否存在异常

编辑:

当您将条件更改为
e.Error==null
时,什么也没有发生,这是因为该错误为非null,因此您的
DisplayStories(e.Result)
语句从未触发

所讨论的异常是
SecurityException
,因为浏览器中的Silverlight应用程序不允许您调用外部网站,除非该网站具有Silverlight跨域策略文件。不幸的是,Digg的策略文件不再允许跨域访问,这意味着您将无法拨打此电话,除非您在浏览器外以完全信任的方式运行应用程序。有关更多详细信息,请参阅

要以完全信任的浏览器外应用程序运行应用程序,请在visual studio中,右键单击项目并选择“属性”。在“Silverlight”选项卡上,选中显示“启用浏览器外运行”的框。然后单击显示“浏览器外设置”的按钮。在对话框中,选中显示“在浏览器外运行时需要提升信任度”的框。在“调试”选项卡中,对于“启动操作”,选择“浏览器外应用程序”并从下拉列表中选择您的项目


以这种方式运行时,不应再获得SecurityException。

如果我将其更改为==,它不会给我任何错误,也不会真正发生任何事情。我按下按钮,但什么也没发生。在本教程的后面部分,它告诉我们使用以下代码:要使用本地XML文件(digglifestyle.XML),使用该代码我会再次遇到相同的错误。谢谢你的回复!:)非常感谢,它正在工作!(有点)鉴于Digg API已经过时,不再工作,它实际上不再给出结果,但我找到了一个工作的XML页面,它工作了!多谢了,但是没有办法解决这个问题吗?我想将其部署为网页,但如果我不能,则…:(除了让您的服务器(承载您的silverlight应用程序的服务器)包装digg服务并充当代理之外,没有其他解决方法。然后,您的silverlight应用程序可以向您的服务器而不是digg发出请求,并且不会有任何安全例外。