質問

クラスについては、特定のトピックをDiggを検索するSilverlight Webサイトを作成するには、チュートリアルに従う必要があります。 (このチュートリアルをベースとして使用します: http://weblogs.asp.net/scottgu/archive/2010/02/22/first-look-at-silverlight-2.aspx)

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ファイルも入手できますが、使用できますが、それでも機能しません)

何がこれを引き起こしているのかわからず、先生からあまり助けを得ていないので、誰かが私たちを助けてくれることを願っています。

ありがとう、トーマス

役に立ちましたか?

解決

コードのこのセクションの場合:

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

E.Errorがそうであれば、物語を表示すると言っています いいえ ヌル。私はあなたが言って状態を切り替えたいと思います e.Error == null, 、それはエラーがなく、結果を使用しても安全だということを意味します。あなたは、の値を検査するために状態にブレークポイントを置くことをお勧めします e.Error そこに例外があるかどうかを確認します。

編集:

状態を変更したとき e.Error == null そして、何も起こりませんでした、それはエラーが非ヌルだったので、あなたの DisplayStories(e.Result) 声明は発生しませんでした。

問題の例外、 SecurityException, 、Silverlight In-Browserアプリケーションでは、そのWebサイトにSilverlight Cross Domainポリシーファイルがない限り、外部Webサイトに電話をかけることができないためです。残念ながら、Diggのポリシーファイルはクロスドメインアクセスを許可しなくなります。つまり、完全なトラストアウトブラウザーでアプリを実行しない限り、この呼び出しを行うことはできません。見る シルバーライトのネットワークセキュリティアクセス制限 詳細については。

Visual Studioで完全な信頼を備えたブラウザー外アプリとしてアプリを実行するには、プロジェクトを右クリックしてプロパティを選択します。 [Silverlight]タブで、「ブラウザの削除を有効にする」というボックスをチェックします。次に、「ブラウザの設定から」というボタンをクリックします。ダイアログでは、「ブラウザの外で実行するときに高度な信頼が必要」と書かれたボックスを確認してください。 [デバッグ]タブでは、「[開始アクション]の場合、[ブラウザアプリケーションから[アプリケーション]アプリケーションから[]を選択し、ドロップダウンからプロジェクトを選択します。

このように実行したら、SecurityExceptionを取得できなくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top