Frage

Für die Klasse müssen wir ein Tutorial folgen, um eine Silverlight -Website zu erstellen, auf der Digg nach einem bestimmten Thema sucht. (Verwenden Sie dieses Tutorial als Basis: http://weblogs.asp.net/scottgu/archive/2010/02/22/first-look-at-silverlight-2.aspx)

Wir müssen den folgenden Code verwenden, um die Informationen von DIGG abzurufen.

    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;
        }

Und wenn wir die Schaltfläche buchen, erhalten wir den Fehler:

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)

Ich weiß bereits, dass die Digg -API veraltet ist, aber ich glaube nicht, dass dieser Fehler etwas damit zu tun hat. (Wir erhalten sogar eine lokale XML -Datei, die wir verwenden können, aber sie funktioniert immer noch nicht)

Ich habe keine Ahnung, was das verursacht und wir bekommen nicht viel Hilfe von unserem Lehrer, also hoffe ich, dass uns jemand helfen kann.

Danke, Thomas

War es hilfreich?

Lösung

Für diesen Codeabschnitt:

if (e.Error != null)
{
    DisplayStories(e.Result);             
}

Sie sagen, dass Sie die Geschichten anzeigen, wenn E.Error ist nicht Null. Ich denke, Sie möchten den Zustand umstellen, um zu sagen e.Error == null, wie dies bedeuten würde, es gab keinen Fehler und es ist sicher, das Ergebnis zu verwenden. Möglicherweise möchten Sie einen Haltepunkt auf die Bedingung setzen, um den Wert von zu prüfen e.Error Um zu sehen, ob Sie dort eine Ausnahme haben.

Bearbeiten:

Wenn Sie die Bedingung zu geändert haben, um e.Error == null Und nichts ist passiert, das liegt daran, dass der Fehler nicht null war, also Ihr DisplayStories(e.Result) Aussage nie abgefeuert.

Die fragliche Ausnahme, die, die SecurityException, passiert, weil Sie in Silverlight In-Browser-Anwendungen nicht auf externe Websites telefonieren können, es sei denn, diese Website hat eine Silverlight Cross-Domain-Richtliniendatei. Leider ermöglicht die DIGG-Richtliniendatei keinen Cross-Domain-Zugriff mehr, was bedeutet, dass Sie diesen Anruf nicht tätigen können, es sei denn, Sie führen Ihre App mit vollem Vertrauen aus dem Browser aus. Sehen Einschränkung des Netzwerksicherheitszugriffs in Silverlight für mehr Details.

Um Ihre App als Out-of-Browser-App mit vollem Vertrauen in Visual Studio auszuführen, klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften. Überprüfen Sie auf der Registerkarte "Silverlight" das Kontrollkästchen "Aktivieren Sie den Browser". Klicken Sie dann auf die Schaltfläche "Aus den Browsereinstellungen". Überprüfen Sie im Dialogfeld das Kontrollkästchen mit dem Aufenthalt "Erfordernder Vertrauen beim Laufen außerhalb des Browsers". Wählen Sie auf der Registerkarte "Debug" für "Start Action" "aus der Browseranwendung" und wählen Sie Ihr Projekt aus der Dropdown -Liste aus.

Wenn Sie auf diese Weise laufen, sollten Sie nicht mehr die Sicherheitsexception erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top