SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Silverlight 2でのコンテンツの非同期ダウンロード

  • このエントリーをはてなブックマークに追加

 Silverlightでは、WebClientというクラス1つで、あらゆる種類のコンテンツをオンデマンドで動的に取得できます。この記事では、Silverlightを用いてコンテンツを取得するための手順を順を追って説明していきます。

  • このエントリーをはてなブックマークに追加

はじめに

 最近のエンターテインメント界では、オンデマンド型のコンテンツ配信が増えています。音楽や映像を自分の都合のよい時間に視聴できるのは、リビングで楽しむ側にとっては便利です。こうした機能は、Webベースのアプリケーションでは必須と考えられることが多くなっています。この点をふまえて、Silverlightでは、オンデマンドコンテンツをクラス1つで簡単に取得できるようになっています。WebClientというクラスです。

 System.Net.WebClientクラスは、コンテンツを非同期でダウンロードするための特別なユーティリティクラスの役割を果たします。Silverlightでネットワークや通信関連の処理を行う方法は他にもいくつかありますが、このクラスは2つの点で違いがあります。1つは、ダウンロード要求の進行状況を確認できること、もう1つは、他の方法のようなデリゲート型のモデルではなく、イベントベースのモデルを利用したAPIだということです。このクラスでは、画像、音楽、動画などのファイルや、複数のファイルを取りまとめた圧縮ファイル、各種のアプリケーションモジュールなどを取得するための要求を実行できます。WebClientは、あらゆる種類のコンテンツをオンデマンドで動的に取得できるクラスなのです。

 オンデマンドでコンテンツを取得するには、最初にダウンロードの要求処理を行います。また、コンテンツのサイズは非常に大きい場合があるので、その対処方法を考えておくことも欠かせません。さらに、ダウンロード要求が正常に完了した後で、コンテンツの読み込み処理を行う必要があります。この記事では、これらの各手順について、順を追って見ていくことにします。なお、この記事の内容は、拙著『Silverlight 2 in Action』をベースとしています。そちらの本では、Silverlight 2向けのアプリケーションを短時間で作成するための情報について、深く掘り下げて解説しています。

コンテンツの要求処理

 WebClientクラスには、コンテンツを要求するためのメソッドが2つあります。1つはDownloadStringAsync、もう1つはOpenReadAsyncです。両者はよく似ていますが、DownloadStringAsyncは文字列関連のデータを取得するためのメソッド、OpenReadAsyncはバイナリコンテンツを取得するためのメソッドという違いがあります。このセクションでは、2つのメソッドを使った処理方法をそれぞれ見ていきましょう。

文字列コンテンツの要求

 DownloadStringAsyncメソッドでは文字列関連のコンテンツをダウンロードできます。例えば、JSON、XML、オープンなテキスト形式のデータなどです。いずれの種類のデータも、DownloadStringAsyncメソッドでダウンロード処理を開始します。処理は非同期に進み、ダウンロードが完了するかエラーが発生するまで続きます。ダウンロード処理を開始するコードの例をコード1に示します。

コード1
public void RequestStringContent()
{
Uri uri = new Uri("http://www.somedomain.com/rss.xml"); (1)
WebClient webClient = new WebClient();
webClient.DownloadStringAsync(uri); (2)
}

 このコードは、WebClientを使って文字列ベースのコンテンツを要求する処理の例です。まず、ダウンロードの対象コンテンツを表すUriオブジェクトを定義します(1)。その後、このUriオブジェクトをパラメータとしてDownloadStringAsyncメソッドに渡しています(2)。このメソッドによって、Uriが表すコンテンツのダウンロードが始まります。コンテンツの取得にはHTTP GETメソッドが使われます。なお、バイナリコンテンツを取得する場合もHTTP GETが使われます。

バイナリコンテンツの要求

 バイナリコンテンツの要求にはOpenReadAsyncメソッドを使います。例えば、圧縮ファイル(.zipファイル)、アプリケーションモジュール(.dllファイル)、メディアファイルなどを非同期でダウンロードできます。コード2はその例です。

コード2
public void RequestStreamContent()
{
Uri uri = new Uri("http://silverlightinaction.com/video3.wmv");
WebClient webClient = new WebClient();
webClient.OpenReadAsync(uri); (1)
}

 このコードは、WebClientを使ってバイナリコンテンツを要求する処理の例です。コードの内容は、文字列コンテンツのダウンロードとよく似ています。唯一の違いは、バイナリコンテンツの場合にはOpenReadAsyncメソッドを使う(1)ということだけです。さて、いずれの種類のコンテンツをダウンロードする場合も、データのサイズを考慮することが重要です。一般に、ダウンロードサイズが大きい場合には、ユーザーの操作感や利便性を高めるための機能を追加する必要があります。次のセクションではその方法を見ていくことにしましょう。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ダウンロードサイズが大きい場合の対処方法

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

chad.campbell(chad.campbell)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3558 2009/03/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング