Лабораторная работа Основы разработки под Windows Azure содержание обзор 26


Задача 3 – создание веб-роли, позволяющей отображать содержимое гостевой книги и добавлять записи



страница5/8
Дата28.11.2016
Размер2.93 Mb.
Просмотров2116
Скачиваний2
ТипЛабораторная работа
1   2   3   4   5   6   7   8

Задача 3 – создание веб-роли, позволяющей отображать содержимое гостевой книги и добавлять записи


В этой задаче вы доработаете созданную в задаче 1 веб-роль. Изменения затронут пользовательский интерфейс, после чего он сможет отображать содержимое гостевой книги. Вы не будете настраивать содержимое страницы вручную, вместо этого возьмете существующую страницу, находящуюся в каталоге Assets с материалами к данному упражнению. Далее вы добавите код, сохраняющий сущности в таблице, а изображения – в хранилище двоичных объектов.

Добавьте в веб-роль ссылку на проект GuestBook_Data. В панели Solution Explorer щелкните правой кнопкой на узле проекта GuestBook_WebRole, выберите Add Reference, переключитесь на закладку Projects, после чего выберите проект GuestBook_Data и нажмите кнопку OK.

При создании веб-роли была сгенерирована страница Default.aspx. Вы замените ее другой, предварительно подготовленной для вас. Чтобы удалить страницу, в панели Solution Explorer щелкните правой кнопкой на файле Default.aspx в проекте GuestBook_WebRole и выберите Delete.

Добавьте предварительно подготовленную страницу в веб-роль. Чтобы сделать это, щелкните правой кнопкой на проекте GuestBook_WebRole в Solution Explorer, выберите Add | Existing Item. В диалоге Add Existing Item перейдите в каталог Source\Ex1-BuildingYourFirstWindowsAzureApp\Assets, выберите соответствующий предпочитаемому языку каталог (Visual C# или Visual Basic); удерживая кнопку CTRL, выберите все файлы и нажмите кнопку Add.

Внимание: в каталоге Assets находится пять файлов, которые необходимо добавить в проект - Default.aspx с файлами кода и дизайна, один CSS и одно изображение.

Откройте файл кода для главной страницы проекта GuestBook_WebRole. Чтобы сделать это, щелкните правой кнопкой на файле Default.aspx и выберите пункт View Code.

Добавьте объявления следующих пространств имен.

(Фрагмент кода – Introduction to Windows Azure - Ex1 Web Role Namespace Declarations – CS)



      1. C#

using System.IO;

using System.Net;

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.ServiceRuntime;

using Microsoft.WindowsAzure.StorageClient;

using GuestBook_Data;





      1. (Фрагмент кода – Introduction to Windows Azure - Ex1 Web Role Namespace Declarations – VB)

      1. Visual Basic

Imports System.IO

Imports System.Net

Imports Microsoft.WindowsAzure

Imports Microsoft.WindowsAzure.ServiceRuntime

Imports Microsoft.WindowsAzure.StorageClient

Imports GuestBook_Data

Добавьте в класс Default объявления свойств.

(Фрагмент кода – Introduction to Windows Azure - Ex1 Web Role Member Fields – CS)

C#

public partial class Default : System.Web.UI.Page

{

private static bool storageInitialized = false;



private static object gate = new Object();

private static CloudBlobClient blobStorage;

...

}

(Фрагмент кода – Introduction to Windows Azure - Ex1 Web Role Member Fields – VB)



Visual Basic

Partial Public Class _Default

Inherits System.Web.UI.Page

Private Shared storageInitialized As Boolean = False

Private Shared gate As New Object()

Private Shared blobStorage As CloudBlobClient

...


End Class

Добавьте обработчик события SignButton_Click со следующим содержимым.

(Фрагмент кода – Introduction to Windows Azure - Ex1 SignButton_Click – CS)

C#

public partial class Default : System.Web.UI.Page

{

...



protected void SignButton_Click(object sender, EventArgs e)

{

if (FileUpload1.HasFile)



{

InitializeStorage();



// upload the image to blob storage

string uniqueBlobName = string.Format("guestbookpics/image_{0}{1}", Guid.NewGuid().ToString(), Path.GetExtension(FileUpload1.FileName));

CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName);

blob.Properties.ContentType = FileUpload1.PostedFile.ContentType;

blob.UploadFromStream(FileUpload1.FileContent);

System.Diagnostics.Trace.TraceInformation("Uploaded image '{0}' to blob storage as '{1}'", FileUpload1.FileName, uniqueBlobName);



// create a new entry in table storage

GuestBookEntry entry = new GuestBookEntry() { GuestName = NameTextBox.Text, Message = MessageTextBox.Text, PhotoUrl = blob.Uri.ToString(), ThumbnailUrl = blob.Uri.ToString() };

GuestBookDataSource ds = new GuestBookDataSource();

ds.AddGuestBookEntry(entry);

System.Diagnostics.Trace.TraceInformation("Added entry {0}-{1} in table storage for guest '{2}'", entry.PartitionKey, entry.RowKey, entry.GuestName);

}



NameTextBox.Text = "";

MessageTextBox.Text = "";



DataList1.DataBind();

}

}



(Фрагмент кода – Introduction to Windows Azure - Ex1 SignButton_Click – VB)

Visual Basic

Public Class _Default

Inherits System.Web.UI.Page

...

Protected Sub SignButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles SignButton.Click



If FileUpload1.HasFile Then

InitializeStorage()



' upload the image to blob storage

Dim uniqueBlobName As String = String.Format("guestbookpics/image_{0}{1}", Guid.NewGuid().ToString(), Path.GetExtension(FileUpload1.FileName))

Dim blob As CloudBlockBlob = blobStorage.GetBlockBlobReference(uniqueBlobName)

blob.Properties.ContentType = FileUpload1.PostedFile.ContentType

blob.UploadFromStream(FileUpload1.FileContent)

System.Diagnostics.Trace.TraceInformation("Uploaded image '{0}' to blob storage as '{1}'", FileUpload1.FileName, uniqueBlobName)



' create a new entry in table storage

Dim entry As New GuestBookEntry() With {.GuestName = NameTextBox.Text, .Message = MessageTextBox.Text, .PhotoUrl = blob.Uri.ToString(), .ThumbnailUrl = blob.Uri.ToString()}

Dim ds As New GuestBookDataSource()

ds.AddGuestBookEntry(entry)

System.Diagnostics.Trace.TraceInformation("Added entry {0}-{1} in table storage for guest '{2}'", entry.PartitionKey, entry.RowKey, entry.GuestName)

End If



NameTextBox.Text = ""

MessageTextBox.Text = ""



DataList1.DataBind()

End Sub


End Class

Внимание: чтобы добавить запись обработчик предварительно вызывает метод InitializeStorage, позволяющий убедиться в наличии контейнера двоичных объектов и доступа к нему. Данный метод будет создан вами в ближайшее время.

Далее метод получает ссылку на контейнер, создает уникальное имя для объекта и создает сам объект, после чего загружает туда переданное пользователем изображение. Тип содержимого – свойство ContentType – устанавливается равным типу загруженного файла. Когда содержимое двоичного объекта будет прочитано, данный тип будет использован для корректного отображения изображения.

В самом конце создается сущность типа GuestBookEntry, которую вы описали в предыдущей задаче, инициализируется введенными пользователем данными, после чего сохраняется с использованием методов класса GuestBookDataSource.

Последним шагом процедуры выполняется привязка данных для обновления содержимого страницы.

Обновите содержимое метода Timer1_Tick в соответствии с приведенным ниже текстом.

(Фрагмент кода – Introduction to Windows Azure - Ex1 Timer1_Tick – CS)

C#

public partial class Default : System.Web.UI.Page

{

...


protected void Timer1_Tick(object sender, EventArgs e)

{

DataList1.DataBind();



}

}

(Фрагмент кода – Introduction to Windows Azure - Ex1 Timer1_Tick – VB)



Visual Basic

Public Class _Default

Inherits System.Web.UI.Page

...


Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick

DataList1.DataBind()

End Sub

End Class



Внимание: таймер периодически принудительно обновляет содержимое страницы.

Найдите обработчик события Page_Load и обновите его содержимое в соответствие с приведенным ниже примером, чтобы включить таймер.

(Фрагмент кода – Introduction to Windows Azure - Ex1 Page_Load – CS)

C#

public partial class Default : System.Web.UI.Page

{

...



protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)



{

Timer1.Enabled = true;

}

}

}



(Фрагмент кода – Introduction to Windows Azure - Ex1 Page_Load – VB)

Visual Basic

Public Class _Default

Inherits System.Web.UI.Page

...

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



If Not (Page.IsPostBack) Then

Timer1.Enabled = True

End If

End Sub


End Class

Добавьте реализацию метода InitializeStorage в соответствии с приведенным ниже фрагментом (выделенная часть кода).

(Фрагмент кода – Introduction to Windows Azure - Ex1 InitializeStorage – CS)

C#

public partial class Default : System.Web.UI.Page

{

...



private void InitializeStorage()

{

if (storageInitialized)



{

return;

}

lock (gate)

{

if (storageInitialized)

{

return;

}



try

{

// read account configuration settings

var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");



// create blob container for images

blobStorage = storageAccount.CreateCloudBlobClient();

CloudBlobContainer container = blobStorage.GetContainerReference("guestbookpics");

container.CreateIfNotExist();



// configure container for public access

var permissions = container.GetPermissions();

permissions.PublicAccess = BlobContainerPublicAccessType.Container;

container.SetPermissions(permissions);

}

catch (WebException)

{

throw new WebException("Storage services initialization failure. "

+ "Check your storage account configuration settings. If running locally, "

+ "ensure that the Development Storage service is running.");

}

storageInitialized = true;

}

}

}

(Фрагмент кода – Introduction to Windows Azure - Ex1 InitializeStorage – VB)



Visual Basic

Public Class _Default

Inherits System.Web.UI.Page

...


Private Sub InitializeStorage()

If storageInitialized Then

Return

End If

SyncLock gate

If storageInitialized Then

Return

End If



Try

' read account configuration settings

Dim storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString")

' create blob container for images

blobStorage = storageAccount.CreateCloudBlobClient()

Dim container As CloudBlobContainer = blobStorage.GetContainerReference("guestbookpics")

container.CreateIfNotExist()



' configure container for public access

Dim permissions = container.GetPermissions()

permissions.PublicAccess = BlobContainerPublicAccessType.Container

container.SetPermissions(permissions)

Catch e1 As WebException

Throw New WebException("Storage services initialization failure. " _

& "Check your storage account configuration settings. If running locally, " _

& "ensure that the Development Storage service is running.")

End Try

storageInitialized = True

End SyncLock

End Sub

End Class



Внимание: в первую очередь метод InitializeStorage проверяет, не был ли он выполнен ранее. Затем он читает из файла конфигурации информацию об учетной записи хранилища, создает контейнер для изображений и настраивает для него возможность общего доступа.

Поскольку веб-роль использует сервисы хранения данных Windows Azure (Windows Azure storage services), необходимо хранить реквизиты для подключения к ним. Чтобы создать новую настройку, в панели Solution Explorer разверните узел Roles, находящийся в проекте GuestBook и дважды щелкните на роли GuestBook_WebRole. В настройках роли перейдите на закладку Settings. Нажмите Add Setting, укажите в качестве имени строку “DataConnectionString” (колонка Name), измените тип на ConnectionString, после чего нажмите кнопку с многоточием.



Рисунок

Добавление в файл конфигурации информации об учетной записи хранилища

В диалоге Storage Account Connection String выберите вариант Use the Windows Azure storage emulator (использовать эмулируемое хранилище) и нажмите OK.



Рисунок

Создание строки подключения к эмулируемому хранилищу

Внимание: учетная запись хранилища (табличное, двоичных объектов и очереди) создается отдельно, поэтому для использования ее необходимо предварительно создать, используя административный портал. В этом упражнении вы будете использовать эмулируемое хранилище, что позволяет разрабатывать и отлаживать приложения локально.

Чтобы использовать эмулятор хранилища, необходимо в строке подключения указать значение UseDevelopmentStorage=true. Для подключения к реально существующему хранилищу необходимо указать протокол, имя хранилища и ключ для доступа:

где YourAccountName – имя сервиса хранения данных, а YourAccountKey ключ.

Нажмите сочетание клавиш CTRL + S, чтобы сохранить изменения в файле конфигурации.

Теперь необходимо предусмотреть, что будет служить в качестве источника информации о конфигурации. В проекте GuestBook_WebRole откройте файл Global.asax.cs (для проекта на Visual C#) или Global.asax.vb (для проекта на Visual Basic).

Добавьте объявления пространств имен Microsoft.WindowsAzure и Microsoft.WindowsAzure.ServiceRuntime.

C#

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.ServiceRuntime;



Visual Basic

Imports Microsoft.WindowsAzure

Imports Microsoft.WindowsAzure.ServiceRuntime

Добавьте в метод Application_Start следующий фрагмент кода.

(Фрагмент кода – Introduction to Windows Azure - Ex1 SetConfigurationSettingPublisher – CS)

C#

void Application_Start(object sender, EventArgs e)

{

Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>



{

configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));

});

}

(Фрагмент кода – Introduction to Windows Azure - Ex1 SetConfigurationSettingPublisher – VB)



Visual Basic

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

CloudStorageAccount.SetConfigurationSettingPublisher(Function(configName, configSetter) configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))

End Sub


Каталог: documents -> rus -> msdn -> wa labs
wa labs -> Лабораторная работа Использование Windows Azure для потокового вещания с поддержкой Smooth Streaming
wa labs -> Лабораторная работа Развертывание приложений в Windows Azure Версия: 0
wa labs -> Лабораторная работа Использование федеративной аутентификации в веб-приложении под Windows Azure
msdn -> При спонсорской поддержке корпорации майкрософт
wa labs -> Лабораторная работа Основы разработки с Access Control Service 0 Содержание Обзор лабораторной работы 3


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал