2011-10-19 8 views
0

クラスについては、DIGGで特定のトピックを検索するSilverlight Webサイトを作成するチュートリアルに従わなければなりません。 (このチュートリアルをベースとして使用:http://weblogs.asp.net/scottgu/archive/2010/02/22/first-look-at-silverlight-2.aspxDigg APIとURIハンドラ(silverlight)を使用した不明なエラー

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

そしてbuttonSearchブッシュとき、私たちはエラーが出る:

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) 

は、私はすでにDiggのAPIが古いですけど、私はこのエラーはそれとは何かを持っているとは思いません。 (ローカルのXMLファイルも取得できますが、まだ動作しません)

私はこれを引き起こしていることはわかりませんし、先生から多くの助けを得ていないので、誰かができることを願っています助けて。

おかげで、コードのこの部分については トーマス

+0

InnerExceptionとは何ですか? –

答えて

1

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クロスドメインポリシーファイルがある場合を除き、外部Webサイトを呼び出すことができないためです。残念ながら、Diggのポリシーファイルではドメイン間のアクセスが許可されなくなりました。つまり、ブラウザから完全に信頼できる状態でアプリを実行しない限り、この呼び出しを行うことはできません。詳細は、Network Security Access Restriction in Silverlightを参照してください。

完全に信頼できるブラウザ外のアプリケーションとしてアプリケーションを実行するには、Visual Studioでプロジェクトを右クリックし、[プロパティ]を選択します。 [Silverlight]タブで、[ブラウザが不足していることを有効にする]チェックボックスをオンにします。次に、「ブラウザの設定がありません」というボタンをクリックします。ダイアログで、「ブラウザの外で実行しているときに昇格された信頼を必要とする」というチェックボックスをオンにします。 [デバッグ]タブの[アクションの開始]で[ブラウザのアプリケーション外]を選択し、プルダウンからプロジェクトを選択します。

この方法で実行すると、SecurityExceptionが発生しなくなります。

+0

もしそれを==に変更しても、それは私にエラーを与えたり、何か本当に起こることはありません。私はボタンを押すが、もう何も起こらない。 チュートリアルの後半に、次のコードを使用するように指示しています。http://pastebin.com/CYywS9WxローカルXMLファイル(digglifestyle.xml)を使用するには、そのコードを使用して同じエラーが再び表示されます。 返信いただきありがとうございます。 :) – Schoof

+0

これはe.Error = http://pastebin.com/Khm7Tqbsの内容です – Schoof

+0

ありがとう、それは働いています!(幾分) DiggのAPIを見ると、古くなっていて、もう機能していないのですが、これ以上の結果は得られませんが、XMLページが見つかって動作します。ありがとうございました – Schoof

関連する問題