Question

Pour la classe, nous devons suivre un tutoriel pour créer un site Web silverlight que les recherches DIGG pour un sujet donné. (L'utilisation de ce tutoriel comme base: http://weblogs.asp.net/scottgu/archive/2010/02/22/first-look-at-silverlight-2.aspx )

Nous devons utiliser le code suivant pour récupérer les informations de 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;
        }

Et quand la douille buttonSearch, nous obtenons l'erreur:

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)

Je connais déjà l'API Digg est obsolète, mais je ne pense pas que cette erreur n'a rien à voir avec elle. (Nous avons même un fichier XML local, que nous pouvons utiliser, mais il ne fonctionne toujours pas)

Je ne sais pas ce qui cause cela et nous ne sommes pas obtenir de l'aide beaucoup de notre professeur, donc j'espère que quelqu'un peut nous aider.

Merci, Thomas

Était-ce utile?

La solution

Pour cette section de code:

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

Vous dites pour afficher les histoires si e.Error est pas null. Je pense que vous voulez changer la condition de dire e.Error == null, car cela voudrait dire qu'il n'y avait pas d'erreur et son coffre-fort à utiliser le résultat. Vous voudrez peut-être mettre un point d'arrêt à la condition de contrôler la valeur de e.Error pour voir si vous avez une exception là.

Edit:

Lorsque vous avez modifié la condition e.Error == null et rien ne se passait, c'est parce que l'erreur était non nulle, de sorte que votre déclaration de DisplayStories(e.Result) n'a jamais tiré.

L'exception en question, le SecurityException, arrive parce que les applications Silverlight dans le navigateur ne vous permet pas de faire des appels vers des sites externes à moins que le site dispose d'un fichier de stratégie inter-domaines Silverlight. Malheureusement, le dossier de la politique de Digg ne permet plus l'accès inter-domaines, ce qui signifie que vous ne serez pas en mesure de faire cet appel à moins que vous exécutez votre application avec une confiance totale hors navigateur. Voir d'accès au réseau de sécurité Restriction Silverlight pour plus de détails.

Pour exécuter votre application comme une application hors navigateur avec pleine confiance, en studio visuel, un clic droit sur votre projet et choisissez Propriétés. Dans l'onglet « Silverlight », cochez cette case qui dit « permettent l'exécution de navigateur. » Cliquez ensuite sur le bouton qui dit « Out des paramètres du navigateur. » Dans la boîte de dialogue, cochez la case qui dit « exigent une confiance élevée lors de l'exécution en dehors du navigateur. » Dans l'onglet « Mise au point », pour « action Démarrer », choisissez « Sur l'application du navigateur » et sélectionnez votre projet dans le menu déroulant.

Lorsque vous exécutez cette façon, vous ne devriez plus obtenir le SecurityException.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top