テスターですが何か?

ホビープログラマ略してHPです

【日本語訳】Exploring Windows Azure Storage part8

leave a comment »

このエントリーはMSDNのチュートリアル「Exploring Windows Azure Storage」の「Task1 – Retrieving Blob Data from Storage」の日本語訳になります。このコンテンツ、日本語訳全体については、こちらのエントリーを参照してください。

 

Task1 – Retrieving Blob Data from Storage

このエントリーでは、Windows Azure Storage に保存されている画像を表示する画像ギャラリーページを作成します。提供されているソリューションは画像を表示し、メタデータを入力する1画面のWebサイトプロジェクトが含まれています。コードビハインドファイルを編集して必要な機能を追加していきます。

 

1.[スタート]-[すべてのプログラム]-[Microsoft Visual Studio 2010]から、[Microsoft Visual Studio 2010]を右クリックして[管理者として選択]を実行し、Visual Studioを管理者として権限昇格して起動します。

2.[ファイル]メニューから[開く]-[プロジェクトを開く]を選択し、[プロジェクトを開く]ダイアログより、「\Source\Ex02-WorkingWithTables\Begin」へ移動し、お好みの言語のフォルダーを選択後、「Begin.sln」を開きます。

3.Windows Azure Blob Storageへアクセスするための設定を行うために、サービス定義ファイルを変更します。ソリューションエクスプローラーから RdImageGallery プロジェクトの ロール フォルダを展開し、 RdImageGallery_WebRole を右クリックし、[プロパティ]を選択します。

image

図10.ロールの設定

4.[設定]タブから、[設定の追加]をクリックし「DataConnectionString」という名前の接続文字列を作成します。種類を「接続文字列」に設定し、[…]ボタンをクリックしてストレージエミュレーターへの接続文字列を設定します。

image

図11.ストレージへの接続文字列の設定

image

図12.ストレージアカウント接続文字列ダイアログ

5.「ContainerName」という名前のもう一つの設定を追加し、値に「gallery」を設定します。

image

図13.コンテナ名の設定の追加

Note: コンテナ名は有効なDNS名で、以下の命名規則に従っていなければなりません

  • 文字または数字で始まり、文字、数字、スラッシュのみ含まれていること
  • すべて小文字であること
  • 3文字以上、63文字以下であること
  • ピリオドの次にスラッシュが来ないこと

6.ソリューションエクスプローラーから RDImageGallary_WebRoleプロジェクトを展開し、画像ギャラリーのUI用のコードビハインドファイルを開くために、Default.aspx ファイルを右クリックして[コードの表示]を選択します。次のステップでこのファイルを編集し、必要な機能を追加していきます。

7.以下の名前空間宣言がファイルの先頭に存在するか確認してください。これらの名前空間はストレージユーティリティ、ServiceRuntimeクラス用です。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-01-Namespace-CS)

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;
using Microsoft.WindowsAzure.StorageClient.Protocol;

(コードスニペット – ExploringWindowsAzureStorage-Ex02-01-Namespace-VB)

Imports Microsoft.WindowsAzure
Imports Microsoft.WindowsAzure.ServiceRuntime
Imports Microsoft.WindowsAzure.StorageClient
Imports Microsoft.WindowsAzure.StorageClient.Protocol

8.このハンズオンラボではパブリックコンテナのblobにデータを保存します、そのため一般の匿名ユーザーからも見ることができます。このステップでは ServiceConfiguration.cscfgファイルに記載したコンテナが存在することを保証するコードを追加します。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-02-EnsureContainerExistsMethod-CS)

        private void EnsureContainerExists()
        {
            var container = GetContainer();
            container.CreateIfNotExist();
            var permissions = container.GetPermissions();
            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            container.SetPermissions(permissions);
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex02-02-EnsureContainerExistsMethod-VB)

    Public Sub EnsureContainerExists()

        Dim container = GetContainer()
        container.CreateIfNotExist()
        Dim permissions = container.GetPermissions
        permissions.PublicAccess = BlobContainerPublicAccessType.Container
        container.SetPermissions(permissions)

    End Sub

9.次に、前のステップで追加したコードで作成されたコンテナの参照を取得するユーティリティメソッドを作成します。コンテナはすべてのblob操作に関わるため、このメソッドはほぼすべてのオペレーションから呼び出されます。_Defaultクラスの最後にコンテナをさくせうするメソッドを追加します。このメソッドは、前の手順で作成した設定を利用します。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-03-GetContainerMethod-CS)

        private CloudBlobContainer GetContainer()
        {
            // アカウントのハンドルを取得、blobサービスの作成、コンテナプロキシの取得
            var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
            var client = account.CreateCloudBlobClient();
            return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName"));
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex02-03-GetContainerMethod-VB)

    Private Function GetContainer() As CloudBlobContainer

        ' アカウントのハンドルを取得、blobサービスの作成、コンテナプロキシの取得
        Dim account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString")
        Dim client = account.CreateCloudBlobClient()
        Return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName"))

    End Function

10.Page_Loadメソッドにコンテナの初期化と、画面にblob storageから取得した画像を表示するための asp:ListViewコントロールをリフレッシュする以下のコードを追加します。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-04-PageLoadMethod-CS)

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    this.EnsureContainerExists();
                }
                this.RefreshGallery();
            }
            catch (System.Net.WebException we)
            {
                status.Text = "Network error: " + we.Message;
                if (we.Status == System.Net.WebExceptionStatus.ConnectFailure)
                {
                    status.Text += "<br />Blob Serviceが" + ConfigurationManager.AppSettings["storageEndpoint"]
                                + "で動作していることを確認してください。";
                }
            }
            catch (StorageException se)
            {
                Console.WriteLine("Storage Service Error: " + se.Message);
            }
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex02-04-PageLoadMethod-VB)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        Try
            If Not IsPostBack Then
                Me.EnsureContainerExists()
            End If
            Me.RefreshGallerry()
        Catch we As System.Net.WebException
            status.Text = "Network Error: " & we.Message
            If we.Status = System.Net.WebExceptionStatus.ConnectFailure Then
                status.Text += "<br />Blob Serviceが" & ConfigurationManager.AppSettings("storageEntpoint") &
                            "で動作していることを確認してください。"
            End If
        Catch se As StorageException
            Console.WriteLine("Storage Service Error: " & se.Message)
        End Try

    End Sub

11._Defaultクラスの最後に画像ギャラリーコンテナーで利用可能な blob のリストを image コントロールにバインドするメソッドを追加します。このコードは各blobについての情報を保持している IListBlobItem オブジェクトのコレクションを取得するために CloudBlobContainer オブジェクトの ListBlobs メソッドを使用しています。imageコントロール(asp:ListView)は画像を画面に表示するためにこれらのオブジェクトをバインドします。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-05-RefreshGallery-CS)

        private void RefreshGallery()
        {
            images.DataSource =
                this.GetContainer().ListBlobs(new BlobRequestOptions()
                {
                    UseFlatBlobListing = true,
                    BlobListingDetails = BlobListingDetails.All
                });
            images.DataBind();
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex02-04-RefreshGallery-VB)

    Private Sub RefreshGallery()

        Dim options As BlobRequestOptions = New BlobRequestOptions With
                                            {.BlobListingDetails = BlobListingDetails.All,
                                             .UseFlatBlobListing = True}
        images.DataSource = Me.GetContainer.ListBlobs(options)
        images.DataBind()

    End Sub

12.F5キーを押下し、アプリケーションをビルド・実行します。ブラウザが起動し、画像ギャラリーコンテンツが表示されます。この時点ではコンテナーは空のため、ListViewには ”No Data Available” と表示されます。次のエントリーでWindows Azure StorageのBlobにデータを保存する機能を実装します。

image

図14 画像ギャラリーアプリケーション(コンテナが空の状態)

Note:

ストレージへの接続設定が正しくない場合、または、Storage Serviceが動作していない場合、以下のようなエラーが表示されます。

image

図15 Windows Azure Storageへの接続設定が正しくない場合のエラー

13.Visual Studio上でShift+F5キーを押下してデバッグ実行を停止し、Compute Emulator 上から配置されたアプリケーションを削除します。

 

次は「Task2 – Uploading Blob Data to Storage」です。

Written by david9142

2011年12月10日 @ 5:52 PM

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。