locked
silverlightでWebサービスのRSSリーダーAPを作成するには? RRS feed

  • 質問

  • Webサーバーを限定せずに動作するRSSリーダーAPをSilverlightで作ってみようと思っています。

    ASP.netですと
    「XDocument doc = XDocument.Load("http://RSSサービス");」
    などで簡単にXMLデータを取得出来ますがSilverlightですと
    どういった手順で取得出来ますでしょうか?

    また、サポート予定の方法などもありましたら教えて下さい。

    2008年6月15日 9:56

回答

  • ここ<wankuma.com>に書いてあるリンク先(英文)と、ここ<wankuma.com>に「翻訳した」と書いているリンク先の、さらに先<microsoft.com>(英文)を読めばいいと思います。「さらに先」は、Silverlight2beta2 SDK をインストールすると、日本語が手に入ります。

    2008年6月18日 3:08

すべての返信

  • ここ<wankuma.com>に書いてあるリンク先(英文)と、ここ<wankuma.com>に「翻訳した」と書いているリンク先の、さらに先<microsoft.com>(英文)を読めばいいと思います。「さらに先」は、Silverlight2beta2 SDK をインストールすると、日本語が手に入ります。

    2008年6月18日 3:08
  • 分かり易いヒントをありがとうございます。
    他にもいろいろ探してみたところ
    http://msdn.microsoft.com/en-us/library/cc296254(VS.95).aspx
    の「Accessing HTTP-Based Services Directly」辺りのやり方が一番楽そうでした。
    手順としては
     1-1.(理想)Webサービスを提供しているWebサーバに「crossdomain.xml」を設定してもらい
    クロスドメインネットワークアクセスの許可をもらう。
     1-2.(無理な場合)silverlightを提供しているWebサーバと同一のドメインにXMLファイルを置いてもらう
    Webサービスを動作させる。
     2.silverlight2の「DownloadStringAsync」機能でXMLデータを取得する。
     3.取得したXMLデータをLinqToXML等に変換して利用する。
    という方法にしました。

    1-2.についてはもっと良い方法があるかも知れません。

    簡単な動作確認のために作成したソースを載せて置きます。
    良かったら参考にしてみて下さい。

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;

    /// Add References.
    using System.ServiceModel.Syndication;
    using System.Xml.Linq;

    namespace GetXMLtoGrid
    {
        public partial class Page : UserControl
        {
            /// <summary>
            /// City property class
            /// </summary>
            public class City
            {
                public string CityId { get; set; }
                public string CityName { get; set; }
            }

            public Page()
            {
                InitializeComponent();

                // Execute DownloadStringService.
                DownloadStringService();
            }

            /// <summary>
            /// DownloadStringService
            /// </summary>
            public void DownloadStringService()
            {
                WebClient client = new WebClient();

                // Change to Web Service URL.
                // ex)http://localhost:54728/GetXMLtoGridWeb/ClientBin/city.xml
                //
                // <rss version="2.0" xmlns:ldCity="http://sample.com/rss/2.0">
                //     <city title="東京" id="1" />
                //     <city title="大阪" id="2" />
                //     <city title="福岡" id="3" />
                // </rss>
                Uri baseUri = new Uri(client.BaseAddress);
                string rootPath = System.IO.Path.GetDirectoryName(baseUri.LocalPath).Replace('\\', '/');
                string xmlFile = "city.xml";
                string uri = String.Format("{0}://{1}:{2}{3}/{4}"
                    , baseUri.Scheme, baseUri.Host, baseUri.Port, rootPath, xmlFile);

                Uri serviceUri = new Uri(uri);
                WebClient service = new WebClient();
                service.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Service_DownloadCompleted);
                service.DownloadStringAsync(serviceUri);
            }

            /// <summary>
            /// Service_DownloadCompleted Event
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void Service_DownloadCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    Display(e.Result);
                }
            }

            /// <summary>
            /// Display
            /// </summary>
            /// <param name="xmlContent"></param>
            void Display(string xmlContent)
            {
                XDocument xml = XDocument.Parse(xmlContent);

                // Get City Info
                var query = from s in xml.Descendants("city")
                            select new City
                            {
                                CityId = (string)s.Attribute("id"),
                                CityName = (string)s.Attribute("title"),
                            };

                // Define DataGrid
                // ex)<my:DataGrid x:Name="Grd1"></my:DataGrid>
                Grd1.ItemsSource = query;
            }
        }
    }



    2008年6月21日 22:11
  • こんにちは。中川俊輔 です。

     

    Jittaさん、回答ありがとうございます。

     

    mochi06さん、お調べになった内容やサンプルコードを投稿して頂き、ありがとうございます。

    問題解決のヒントになったようですので、Jittaさんの回答へ回答済みチェックをつけさせていただきました。

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    mochi06さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

     

    2008年7月7日 9:09