Файл: Основы_обл_техн_практика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.04.2024

Просмотров: 60

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

6.Переключитесь обратно в окно браузера, где открыт портал управления Windows Azure.

7.На портале выберите сервис, который Вы создали в предыдущем упражнении и нажмите New Staging Deployment на панели инструментов.

8.В диалоге Create a new Deployment выберите Package location, нажмите Browse Locally, выберите папку где был создан пакет в пункте 4 и затем выберите файл

GuestBook.cspkg.

9.Далее выберите Configuration File, нажмите Browse Locally и выберите ServiceConfiguration.cscfg из той же папки (пункт 8).

10.Введите имя Deployment name и нажмите OK. В диалоге с предупреждением выберите Yes.

11.Дождитесь завершения процесса развертывания, это можно занять несколько минут.

Литература

1. Windows Azure Platform Training Kit - January 2011 Update

Практическая работа номер 5

Работа с Blob

Цель работы

Целью лабораторной работы является практическое освоение процесса работы с Blob в Windows Azure.

Аппаратура и программные инструменты, необходимые для лабораторной работы

Настольный или портативный компьютер, поддерживающий виртуализацию,

операционная система Microsoft Windows XP, Vista, Windows 7.

Доступ к сети Интернет. Наличие аккаунта Windows Azure.

Продолжительность лабораторной работы

2 академических часа

1.Получение Blob данных из хранилища

1.Откройте меню Пуск | Все программы| Microsoft Visual Studio 2010 | Microsoft Visual Studio 2010.

2.В меню File выберите Open и затем Project/Solution. Откройте файл проекта

ExploringWindowsAzureStorageVS2010\Source\Ex02WorkingWithBlobs\begin\CS\begin.sln

3.В Solution Explorer, в проекте RDImageGallery нажмите правой кнопкой по узлу

RDImageGallery_WebRole и выберите Properties

4.На закладке Settings создайте ConnectionString с именем DataConnectionStrin.

Выберите Use development storage


5. Создайте String с именем ContainerName и значением gallery

6.В Solution Explorer нажмите правой кнопкой по Default.aspx в проекте

RDImageGallery_WebRole, выберите View Code, объявите следующие пространства имен

7.Убедитесь что в начале файла объявлены пространства имен using Microsoft.WindowsAzure;

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

8.В конец класса _Default добавьте метод

private void EnsureContainerExists()

{

var container = GetContainer(); container.CreateIfNotExist();

var permissions = container.GetPermissions(); permissions.PublicAccess = BlobContainerPublicAccessType.Container; container.SetPermissions(permissions);

}

9.В конец класса _Default добавьте метод private CloudBlobContainer GetContainer()

{

// Get a handle on account, create a blob storage client and get container proxy var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); var client = account.CreateCloudBlobClient();

return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("Contain erName"));

}

10.Добавьте следующий код в метод Page_Load 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 />Please check if the blob storage service is running at " + ConfigurationManager.AppSettings["storageEndpoint"];

}

}

catch (StorageException se)

{

Console.WriteLine("Storage service error: " + se.Message);

}

}

11.В конец класса _Default добавьте метод private void RefreshGallery()

{

images.DataSource =

this.GetContainer().ListBlobs(new BlobRequestOptions()

{

UseFlatBlobListing = true, BlobListingDetails = BlobListingDetails.All });

images.DataBind();

}

12.Нажмите F5 для запустка приложения. Запустится браузер с приложением.


2.Загрузка Blob данных в хранилище.

1.Откройте Default.aspx.cs

2.Добавьте метод в конец страницы

private void SaveImage(string id, string name, string description, string tags, string fileName, string contentType, byte[] data)

{

// Create a blob in container and upload image bytes to it var blob = this.GetContainer().GetBlobReference(name);

blob.Properties.ContentType = contentType;

// Create some metadata for this image

var metadata = new NameValueCollection(); metadata["Id"] = id;

metadata["Filename"] = fileName;

metadata["ImageName"] = String.IsNullOrEmpty(name) ? "unknown" : name; metadata["Description"] = String.IsNullOrEmpty(description) ? "unknown" : description;

metadata["Tags"] = String.IsNullOrEmpty(tags) ? "unknown" : tags;

// Add and commit metadata to blob blob.Metadata.Add(metadata); blob.UploadByteArray(data);

}

3.Измените метод upload_Click

protected void upload_Click(object sender, EventArgs e)

{

if (imageFile.HasFile)

{

status.Text = "Inserted [" + imageFile.FileName + "] - Content Type [" + imageFile.PostedFile.ContentType + "] - Length [" + imageFile.PostedFile.ContentLength + "]";

this.SaveImage( Guid.NewGuid().ToString(), imageName.Text, imageDescription.Text, imageTags.Text, imageFile.FileName, imageFile.PostedFile.ContentType, imageFile.FileBytes

);

RefreshGallery();

}

else

status.Text = "No image file";

}

4.Нажмите F5 для запуска приложения

5.Введете метаданные Name, Description и Tags. Для выбора изображения нажмите

Browse

6. Нажмите Upload Image для публикации изображения в веб приложении

3.Извлечение метаданных для Blob в хранилище.

1.Откройте Default.aspx в режиме Design, выберите контрол imagesListView и в окне свойств нажмите кнопку Events

2.Найдите метод OnBlobDataBound и вставьте следующий код protected void OnBlobDataBound(object sender, ListViewItemEventArgs e)

{

if (e.Item.ItemType == ListViewItemType.DataItem)

{

var metadataRepeater = e.Item.FindControl("blobMetadata") as Repeater; var blob = ((ListViewDataItem)(e.Item)).DataItem as CloudBlob;

// If this blob is a snapshot, rename button to "Delete Snapshot" if (blob != null)

{

if(blob.SnapshotTime.HasValue)


{

var delBtn = e.Item.FindControl("deleteBlob") as LinkButton; if (delBtn != null) delBtn.Text = "Delete Snapshot";

var snapshotBtn = e.Item.FindControl("SnapshotBlob") as LinkButton; if (snapshotBtn != null) snapshotBtn.Visible = false;

}

if (metadataRepeater != null)

{

//bind to metadata

metadataRepeater.DataSource = from key in blob.Metadata.AllKeys select new

{

Name = key,

Value = blob.Metadata[key] };

metadataRepeater.DataBind();

}

}

}

}

3.Нажмите F5 для запуска приложения. Убедитесь что отображаются метаданные для изображения, загруженного ранее

4. Удаление Blob из хранилища

1.Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола asp:ListView. Раскомментируйте код , следующий за контролом blobMetadata

<div class="item">

<ul style="width:40em;float:left;clear:left" > <asp:Repeater ID="blobMetadata" runat="server"> <ItemTemplate>

<li><%# Eval("Name") %><span><%# Eval("Value") %></span></li> </ItemTemplate>

</asp:Repeater>

<li>

<asp:LinkButton ID="deleteBlob"

OnClientClick="return confirm('Delete image?');" CommandName="Delete" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Delete" oncommand="OnDeleteImage" />

</li>

</ul>

<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/> </div>

2.Добавьте следующий код в файл Default.aspx.cs

protected void OnDeleteImage(object sender, CommandEventArgs e)

{

try

{

if (e.CommandName == "Delete")

{

var blobUri = (string)e.CommandArgument;

var blob = this.GetContainer().GetBlobReference(blobUri);

blob.DeleteIfExists();

RefreshGallery();

}

}

catch (StorageClientException se)

{

status.Text = "Storage client error: " + se.Message;

}

catch (Exception) { }

}

3.Нажмите F5 для запуска приложения

4.Добвьте еще несколько изображений и нажмите Delete на любом из изображений

5.Копирование Blob

1.Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола asp:ListView. Раскомментируйте следующий код

<div class="item">

<ul style="width:40em;float:left;clear:left" > <asp:Repeater ID="blobMetadata" runat="server"> <ItemTemplate>

<li><%# Eval("Name") %><span><%# Eval("Value") %></span></li> </ItemTemplate>

</asp:Repeater>

<li>

<asp:LinkButton ID="deleteBlob"

OnClientClick="return confirm('Delete image?');" CommandName="Delete" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Delete" oncommand="OnDeleteImage" /> <asp:LinkButton ID="CopyBlob"

OnClientClick="return confirm('Copy image?');" CommandName="Copy" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Copy" oncommand="OnCopyImage" />


</li>

</ul>

<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/> </div>

2.Добавьте в файл Default.aspx.cs

protected void OnCopyImage(object sender, CommandEventArgs e)

{

if (e.CommandName == "Copy")

{

//Prepare an Id for the copied blob var newId = Guid.NewGuid();

//Get source blob

var blobUri = (string)e.CommandArgument;

var srcBlob = this.GetContainer().GetBlobReference(blobUri);

// Create new blob

var newBlob = this.GetContainer().GetBlobReference(newId.ToString());

//Copy content from source blob newBlob.CopyFromBlob(srcBlob);

//Explicitly get metadata for new blob

newBlob.FetchAttributes(new BlobRequestOptions{BlobListingDetails = BlobListingDetails.Metadata});

// Change metadata on the new blob to reflect this is a copy via UI newBlob.Metadata["ImageName"] = "Copy of \"" +

newBlob.Metadata["ImageName"] + "\""; newBlob.Metadata["Id"] = newId.ToString(); newBlob.SetMetadata();

// Render all blobs RefreshGallery();

}

}

3.Нажмите F5 для запуска приложения

4.Добвьте еще несколько изображений и нажмите Copy на любом из изображений

6. получение снимков Blob

1.Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола asp:ListView. Раскомментируйте следующий код

<div class="item">

<ul style="width:40em;float:left;clear:left" > <asp:Repeater ID="blobMetadata" runat="server"> <ItemTemplate>

<li><%# Eval("Name") %><span><%# Eval("Value") %></span></li> </ItemTemplate>

</asp:Repeater>

<li>

<asp:LinkButton ID="deleteBlob"

OnClientClick="return confirm('Delete image?');" CommandName="Delete" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Delete" oncommand="OnDeleteImage" /> <asp:LinkButton ID="CopyBlob"

OnClientClick="return confirm('Copy image?');" CommandName="Copy" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Copy" oncommand="OnCopyImage" /> <asp:LinkButton ID="SnapshotBlob"

OnClientClick="return confirm('Snapshot image?');" CommandName="Snapshot" CommandArgument='<%# Eval("Uri")%>'

runat="server" Text="Snapshot" oncommand="OnSnapshotImage" />

</li>

</ul>

<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/> </div>

2.В файл Default.aspx.cs добавьте

protected void OnSnapshotImage(object sender, CommandEventArgs e)

{

if (e.CommandName == "Snapshot")

{

// Get source blob

var blobUri = (string) e.CommandArgument;

var srcBlob = this.GetContainer().GetBlobReference(blobUri);

// Create a snapshot

var snapshot = srcBlob.CreateSnapshot();

status.Text = "A snapshot has been taken for image blob:" + srcBlob.Uri + " at " + snapshot.SnapshotTime;

RefreshGallery();

}

}

3.Нажмите F5 для запуска приложения

4.Нажмите Snapshot на любом из изображений