SHOEISHA iD

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

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

正式リリースされたWindows Azureの力

キューを使用したWindows Azureストレージプログラミング

正式リリースされたWindows Azureの力(3)

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

(12)Workerロールを実装する その3-サムネイル画像の作成

 Workerロール実装の最後として、サムネイル画像の作成を行うメソッドを、WorkerRole.csに次のリスト8のように追加します。

 なお、イメージ処理のために、前もって「WokerRole1」プロジェクトの参照設定に、System.Drawingを追加してください。そして、WokerRole.csには、System.DrawingとSystem.Drawing.Imagingの2つのusingディレクティブを追加しています。

[リスト8]サムネイル画像の作成(WorkerRole.cs)
private MemoryStream CreateThumbnail(MemoryStream orginStream, string option)
{
    // オリジナル画像の取得
    Image orginImage = Image.FromStream(orginStream);

    // サムネイル画像の幅、高さを取得
    int thumbWidth, thumbHeight;
    if (orginImage.Width > orginImage.Height)
    {
        thumbWidth = 120;
        thumbHeight = 120 * orginImage.Height / orginImage.Width;
    }
    else
    {
        thumbHeight = 120;
        thumbWidth = 120 * orginImage.Width / orginImage.Height;
    }

    // サムネイル画像を作成     *1
    Image thumbImage = orginImage.GetThumbnailImage(
        thumbWidth, thumbHeight, null, IntPtr.Zero);

    // オプション指定   *2
    if (option == "1")
    {
        // 90度回転
        thumbImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
    }
    else if (option == "2")
    {
        // 180度回転
        thumbImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
    }

    MemoryStream thumbStream = new MemoryStream();
    thumbImage.Save(thumbStream, ImageFormat.Jpeg);
    thumbStream.Seek(0, SeekOrigin.Begin);

    orginImage.Dispose();
    thumbImage.Dispose();

    return thumbStream;
}

 オリジナル画像を元に、サムネイル画像を作成します(*1)。ImageクラスのGetThumbnailImageメソッドにより、簡単に作成できます。

 Webロールの画面上でユーザーが指定したオプションを、キューのメッセージにより取得しているので、そのオプション指定に基づきサムネイル画像を回転します(*2)。ImageクラスのRotateFlipメソッドにより、簡単にイメージを回転や反転させることができます。

 これで、Workerロールの実装は完了です。

 手順が少し長くなりましたが、これでサンプルアプリケーションが無事完成しました。

開発環境での実行

 それでは、作成したサンプルを、ローカルの開発環境で実行してみましょう。

 ソリューションをビルドし、「AzureStorageQueueSample」クラウドサービスプロジェクトを開始します。

 まず、ローカル仮想環境のDevelopment FabricとDevelopment Storageがタスクトレイ上で起動します。続いて、既定のブラウザに、先程の図2のような画面が表示されます。同時に、バックグラウンド上ではWorkerロールも起動しています。

 画面上で、画像ファイルを指定しオプションのいずれかを選んで、[アップロード]ボタンをクリックしてみてください。画像ファイルがブロブへアップロードされ、キューにサムネイル作成のメッセージが送られます。そして、バックグランド上で待機しているWorkerロールにより、メッセージがすぐに処理されて、サムネイル画像が作成されます。画面上の[サムネイル表示]ボタンをクリックすると、Workerロールで作成されたサムネイル画像の一覧が画面上に表示されます。

 さらに、WorkerロールやWebロールの実行時の状況を、Development Fabricから確認できます。タスクトレイ上のアイコンを右クリックし、[Show Development Fabric UI]を選択します。すると、Development Fabricの画面が起動します。

 例えば、バックグラウンドで動作しているWorkerロールの状態を確認したいと思う場合には、左側のツリービューから[Service Deployments]-[deployment]-[AzureStorageQueueSample]-[WorkerRole1]を選択します。すると、右側にウィンドウに起動中のWorkerロールの情報が表示されます。

 次の図8にある右側のウィンドウの下部を見ると、先程の手順(11)でも説明した、メッセージ処理時のトレース情報が正しく出力されていることが分かります。

図8:Development Fabric UIに表示されているWorkerロールの情報
図8:Development Fabric UIに表示されているWorkerロールの情報

クラウド環境への配置

 最後に、サンプルをWindows Azure Platformに配置し、実際のクラウド・アプリケーションとして実行してみましょう。

 そのためには、Windows Azure Platformのいずれかのプランを購入しておく必要があります。各プランの解説や購入方法については、連載第1回で説明しているのでご覧ください。

 また、クラウド環境への配置方法については、前回のサンプルと同様なので、前回の「クラウド環境での実行」の部分を参考にしてください。

まとめ

 今回は、3種類のWindows Azureストレージのうち、特にキューについて注目しました。そして、キューを用いてWebロールとWorkerロールを連携させるサンプルを実際に作成してみました。

 次回は、ASP.NET MVC 2によるWebロールのプログラミングについて紹介する予定です。

 それでは、次回をお楽しみに。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
正式リリースされたWindows Azureの力連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ )

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5222 2010/06/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング