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



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

PBC201ILL

Лабораторная работа

Основы разработки под Windows Azure

СОДЕРЖАНИЕ


Обзор 26

В данной лабораторной работе вы создадите простое приложение GuestBook, в котором демонстрируется ряд возможностей платформы Windows Azure, в том числе использование веб- и прикладных ролей, хранилища двоичных объектов и табличного, а также очередей. 26

В приложении GuestBook веб-роль используется для создания пользовательского интерфейса, предоставляющего возможность как просмотра содержимого гостевой книги, так и добавления в нее новых записей. Каждая запись включает имя, текстовое сообщение и изображение. В приложении также используется прикладная роль, генерирующая миниатюры для добавленных пользователями изображений. 26

Когда пользователь добавляет новую запись, веб-роль загружает соответствующее изображение в хранилище двоичных объектов, после чего добавляет в табличное хранилище новую сущность, содержащую введенную пользователем информацию и ссылку на изображение в хранилище двоичных объектов. При обращении веб-роль форматирует данную информацию таким образом, чтобы пользователь мог просмотреть содержимое гостевой книги. 26

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

В данной лабораторной работе вы научитесь: 27

Для выполнения данной лабораторной работы потребуется наличие следующих инструментов и компонентов: 27

[Данная процедура была выполнена для вас] 28

Для вашего удобства большая часть кода представлена в виде фрагментов (code snippets), зарегистрированных в Visual Studio. Чтобы проверить наличие требуемых для выполнения работы компонентов и установить фрагменты кода: 28

Откройте Проводник Windows (Windows Explorer) и перейдите в каталог Source\Setup. 28

Дважды щелкните на файле Dependencies.dep для запуска утилиты Dependency Checker, используя которую, установите фрагменты кода и недостающие компоненты. 28

В случае появления диалога User Account Control, подтвердите необходимость продолжения выполнения. 28

Внимание: данная операция требует повышения полномочий. Расширение .dep используется утилитой Dependency Checker. Для получения дополнительной информации об использовании утилиты обратитесь к документу Setup.docx, находящемуся в подкаталоге Assets в каталоге с материалами к данной работе. 28



Если вы не знакомы с концепцией использования фрагментов кода в Visual Studio, обратитесь к документу Setup.docx, находящемуся в подкаталоге Assets в каталоге с материалами к данной работе. 28

Данная лабораторная работа содержит описание следующих упраждений: 28

Приблизительное время выполнения данной работы: 60-75 минут. 29

Внимание: при первом запуске Visual Studio вам будет предложено выбрать один из имеющихся наборов настроек. Каждый набор ориентирован на определенный стиль разработки и определяет схему размещения окон, поведение редакторов, перечень доступных фрагментов кода и другие настройки. Описанные ниже действия расчитаны на использование набора настроек под названием «General Development Settings». Если вы выберете другой набор настроек, порядок выполнения тех или иных действий может отличаться от описанного. 29



Упражнение 1: создание вашего первого приложения для Windows Azure 29

В этом упражнении вы создадите приложение – гостевую книгу – и запустите его локально. Для разработки вам потребуется набор расширений для Visual Studio 2010 - Windows Azure Tools for Microsoft Visual Studio. Данный набор добавляет в Visual Studio новую функциональность, позволяя создавать приложения и сервисы для Windows Azure, что вы и будете делать в оставшейся части работы. 29

Внимание: чтобы уменьшить объем ручного ввода кода, вы можете использовать установленные фрагменты кода. Для этого щелкните правой кнопкой мыши в необходимом месте кода, выберите в контекстном меню пункт Insert Snippet - My Code Snippets и необходимый для выполнения текущего упражнения фрагмент кода. 29



Задача 1 – создание проекта в Visual Studio 29

Откройте Visual Studio от имени административной учетной записи: выберите пункты меню Start | All Programs | Microsoft Visual Studio 2010, щелкните правой кнопкой мыши на ярлыке Microsoft Visual Studio 2010 и выберите пункт Run as administrator. 29

В случае появления диалога User Account Control нажмите кнопку Continue. 29

В меню File выберите пункт New, затем Project. 29

В диалоге New Project разверните в списке Installed Templates соответствующий предпочитаемому вами языку узел (Visual C# или Visual Basic) и выберите пункт Cloud. Выберите шаблон проекта Windows Azure Project, присвойте проекту имя (поле Name) – в нашем случае GuestBook, установите расположение (поле Location) в Source\Ex1-BuildingYourFirstWindowsAzureApp\[CS|VB] в подкаталоге в каталоге с материалами, измените имя решения (Solution name) на GuestBook, и убедитесь в том, что установлен флажок Create directory for solution (Создать каталог для решения). Нажмите кнопку OK для создания проекта. 29

Рисунок 30

Рисунок 30

Создание нового проекта для Windows Azure (Visual Basic) 30

Note: Windows Azure поддерживает .NET Framework 4.0. Если вы работаете с Visual Studio 2010, то можете выбрать данную версию платформы и воспользоваться предоставляемыми ей преимуществами. 30



В диалоге New Windows Azure Project на панели Roles раскройте закладку, соответствующую предпочитаемому вами языку (Visual C# или Visual Basic), выберите из списка тип роли ASP.NET Web Role и нажмите кнопку с указывающей вправо стрелкой (>), чтобы добавить экземпляр роли данного типа в решение. Перед тем, как закрыть данный диалог, выберите добавленную роль в правой панели, нажмите на пиктограмму с изображением карандаша и переименуйте роль в GuestBook_WebRole. Нажмите кнопку OK для создания решения. 30

Рисунок 30

Добавление ролей в проект для Windows Azure (C#) 30

30



Рисунок 30

Добавление ролей в проект для Windows Azure (Visual Basic) 30

В обозревателе решения (Solution Explorer) отобразится структура созданного решения. 30

Рисунок 30

Обозреватель решения (Solution Explorer), отображающий структуру решения GuestBook (C#) 30

30



Рисунок 30

Обозреватель решения (Solution Explorer), отображающий структуру решения GuestBook (Visual Basic) 30

Внимание: В созданном решении содержится два проекта. Первый проект, называющийся GuestBook, содержит конфигурацию ролей, образующих облачное приложение. Он включает файл определения службы (service definition file), ServiceDefinition.csdef, содержащий используемые фабрикой Windows Azure метаданные: перечень ролей и их уровень доверия, публикуемые ролями конечные точки, используемое локальное хранилище и сертификаты. В этом же файле определяется перечень специфических для приложения настроек. В файле конфигурации службы (service configuration file), ServiceConfiguration.cscfg, устанавливается количество экземпляров роли каждого типа, значения настроек, перечень которых содержится в файле определения службы. Разделение настроек между файлами определения и конфигурации позволяет обновлять настройки, в том числе изменять число экземпляров ролей, без необходимости перезапуска приложения. 31

Узел Roles в облачном проекте позволяет настроить перечень ролей (веб, прикладная или их сочетание) и связанные с ними проекты. Добавление и настройка ролей в данный узел обновляет содержимое файлов ServiceDefinition.csdef и ServiceConfiguration.cscfg. 31

Второй проект, под названием GuestBook_WebRole – это традиционное ASP.NET приложение, доработанное для функционирования в среде Windows Azure. Оно содержит дополнительный класс, предоставляющий точку входа в приложение и методы, управляющие инициализацией, запуском и остановом роли. 31



Задача 2 – Создание модели данных для работы с табличным хранилищем 31

Создайте проект для размещения в нем классов схемы. Для этого в меню File выберите пункты Add, затем New Project. 32

В диалоге Add New Project в панели Installed Templates раскройте соответствующий предпочитаемому языку узел, выберите категорию Windows, укажите шаблон проекта Class Library. Измените имя на GuestBook_Data, не меняя предлагаемое расположение, и нажмите OK. 32

Рисунок 32

Создание проекта для хранения сущностных классов (C#) 32

Рисунок 32

Создание проекта для хранения сущностных классов (Visual Basic) 32

Удалите сгенерированный класс. Для этого щелкните правой кнопкой на файле Class1.cs (для проекта на Visual C#) или Class1.vb (для проекта на Visual Basic) и выберите Delete. Нажмите кнопку OK в диалоге подтверждения. 32

Добавьте в проект GuestBook_Data ссылку на библиотеку .NET Client Library for WCF Data Services. На панели Solution Explorer щелкните правой кнопкой на узле проекта GuestBook_Data, выберите Add Reference, перейдите на закладку .NET, выберите компонент System.Data.Services.Client и нажмите OK. 32

Рисунок 32

Добавление ссылки на компонент System.Data.Service.Client 32

Повторите предыдущий шаг и добавьте ссылку на сборку Windows Azure storage client API, для чего выберите компонент Microsoft.WindowsAzure.StorageClient. 33

Перед тем, как сохранять сущность в таблице, для нее необходимо описать схему. Чтобы сделать это, щелкните в панели Solution Explorer правой кнопкой на проекте GuestBook_Data, выберите Add, затем Class. В диалоге Add New Item укажите имя - GuestBookEntry.cs (для проекта на Visual C#) или GuestBookEntry.vb (для проекта на Visual Basic) и нажмите кнопку Add. 33

33



Рисунок 33

Добавление класса GuestBookEntry (C#) 33

33



Рисунок 33

Добавление класса GuestBookEntry (Visual Basic) 33

В верхней части файла подключите пространство имен Microsoft.WindowsAzure.StorageClient. 33

C# 33

using Microsoft.WindowsAzure.StorageClient; 33

Visual Basic 33

Imports Microsoft.WindowsAzure.StorageClient 33

Откройте файл GuestBookEntry.cs (для проекта на Visual C#) или GuestBookEntry.vb (для проекта на Visual Basic) и обновите объявление класса GuestBookEntry, сделав его открытым и наследующим от класса TableServiceEntity. 33

Внимание: в проект на Visual Basic класс сразу добавляется как открытый (Public). 33



C# 33

public class GuestBookEntry 33

: Microsoft.WindowsAzure.StorageClient.TableServiceEntity 33



{ 33

} 33

Visual Basic 33

Public Class GuestBookEntry 34

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceEntity 34



End Class 34

Внимание: класс TableServiceEntity объявлен в библиотеке Storage Client API. Он содержит необходимые каждой сущности системные свойства PartititionKey, RowKey и TimeStamp. 34

Свойства PartitionKey и RowKey вместе определяют ключ DataServiceKey, уникально идентифицирующий каждую сущность в таблице. 34

Добавьте в класс GuestBookEntry конструктор, инициализирующий свойства PartitionKey и RowKey. 34

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

C# 34

public GuestBookEntry() 34

{ 34

PartitionKey = DateTime.UtcNow.ToString("MMddyyyy"); 34

// Row key allows sorting, so we make sure the rows come back in time order. 34

RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid()); 34



} 34

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

Visual Basic 34

Public Sub New() 34

PartitionKey = DateTime.UtcNow.ToString("MMddyyyy") 34

' Row key allows sorting, so we make sure the rows come back in time order. 34

RowKey = String.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid()) 34



End Sub 34

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

Свойство RowKey получает инвертированное значение даты и времени с добавленным для уникальности идентификатором (GUID). Внутри разделов данные отсортированы по значению свойства RowKey, поэтому такой способ формирования сразу отсортирует записи в необходимом порядке – новые записи размещаются выше старых. 35

Чтобы завершить описание класса GuestBookEntry, добавьте свойства Message, GuestName, PhotoUrl и ThumbnailUrl, хранящие полезную нагрузку. 35

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



C# 35

public string Message { get; set; } 35

public string GuestName { get; set; } 35

public string PhotoUrl { get; set; } 35

public string ThumbnailUrl { get; set; } 35

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

Visual Basic 35

Public Property Message As String 35

Public Property GuestName As String 35

Public Property PhotoUrl As String 35

Public Property ThumbnailUrl As String 35

Сохраните файл GuestBookEntry.cs (для проекта на Visual C#) или GuestBookEntry.vb (для проекта на Visual Basic). 35

Далее необходимо создать класс, позволяющий взаимодействовать с табличным хранилищем с использованием WCF Data Services. Чтобы сделать это, на панели Solution Explorer щелкните правой кнопкой на проекте GuestBook_Data, выберите Add, затем Class. В диалоге Add New Item установите имя (поле Name) в GuestBookDataContext.cs (для проекта на Visual C#) или GuestBookDataContext.vb (для проекта на Visual Basic) и нажмите Add. 35

В созданном классе обновите его объявление таким образом, чтобы он стал открытым и наследовал от класса TableServiceContext. 35

Внимание: в проект на Visual Basic класс сразу добавляется как открытый (Public). 36



C# 36

public class GuestBookDataContext 36

: Microsoft.WindowsAzure.StorageClient.TableServiceContext 36



{ 36

} 36

Visual Basic 36

Public Class GuestBookDataContext 36

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext 36



End Class 36

Теперь добавьте конструктор, инициализирующий базовый класс информацией о реквизитах для доступа к табличному хранилищу. 36

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

C# 36

public class GuestBookDataContext 36

: Microsoft.WindowsAzure.StorageClient.TableServiceContext 36



{ 36

public GuestBookDataContext(string baseAddress, Microsoft.WindowsAzure.StorageCredentials credentials) 36

: base(baseAddress, credentials) 36

{ } 36



} 36

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

Visual Basic 36

Public Class GuestBookDataContext 36

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext 36

Public Sub New(ByVal baseAddress As String, ByVal credentials As Microsoft.WindowsAzure.StorageCredentials) 37

MyBase.New(baseAddress, credentials) 37

End Sub 37

End Class 37

Внимание: класс TableServiceContext наследует от DataServiceContext из библиотеки WCF Data Services, хранит реквизиты для доступа к табличному хранилищу, а также реализует вызов операций и механизм повтора запросов. 37



Добавьте в класс GuestBookDataContext свойство для таблицы сущностей типа GuestBookEntry. Чтобы сделать это, вставьте следующий (выделенный) код в класс. 37

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

C# 37

public class GuestBookDataContext 37

: Microsoft.WindowsAzure.StorageClient.TableServiceContext 37



{ 37

... 37

public IQueryable GuestBookEntry 37

{ 37

get 37

{ 37

return this.CreateQuery("GuestBookEntry"); 37

} 37

} 37

} 37

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

Visual Basic 37

Public Class GuestBookDataContext 37

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext 37

... 37

Public ReadOnly Property GuestBookEntry() As IQueryable(Of GuestBookEntry) 37

Get 37

Return Me.CreateQuery(Of GuestBookEntry)("GuestBookEntry") 38

End Get 38

End Property 38



End Class 38

Внимание: для создания таблиц вы можете воспользоваться методом CreateTablesFromModel класса CloudTableClient. Когда вы передаете в этот метод в качестве параметра экземпляр класса, наследующего от DataServiceContext (или от TableServiceContext), он находит свойства, возвращающие IQueryable, где T определяет класс таблицы, и создает в хранилище соответствующие таблицы. 38



Теперь вам понадобится объект, который может быть использован для привязки данных в компонентах ASP.NET. На панели Solution Explorer щелкните правой кнопкой на проекте GuestBook_Data, выберите Add, затем Class. В диалоге Add New Item измените имя на GuestBookDataSource.cs (для проекта на Visual C#) или GuestBookDataSource.vb (для проекта на Visual Basic) и нажмите Add. 38

Во вновь добавленный класс импортируйте пространства имен Microsoft.WindowsAzure и Microsoft.WindowsAzure.StorageClient. 38

C# 38

using Microsoft.WindowsAzure; 38

using Microsoft.WindowsAzure.StorageClient; 38

Visual Basic 38

Imports Microsoft.WindowsAzure 38

Imports Microsoft.WindowsAzure.StorageClient 38

Сделайте класс GuestBookDataSource открытым (public), а также добавьте в него свойства для класса контекста и информации об учетной записи хранилища, как показано ниже. 38

Внимание: в проект на Visual Basic класс сразу добавляется как открытый (Public). 38



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

C# 38

public class GuestBookDataSource 38

{ 39

private static CloudStorageAccount storageAccount; 39

private GuestBookDataContext context; 39

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

Visual Basic 39

Public Class GuestBookDataSource 39

Private Shared storageAccount As CloudStorageAccount 39

Private context As GuestBookDataContext 39

End Class 39

Теперь добавьте статический конструктор (Shared в Visual Basic), как показано в следующем фрагменте кода (подсвеченная часть). Код в конструкторе создает таблицы на основе описания класса GuestBookDataContext. 39

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

C# 39

public class GuestBookDataSource 39

{ 39

... 39

static GuestBookDataSource() 39

{ 39

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

CloudTableClient.CreateTablesFromModel( 39

typeof(GuestBookDataContext), 39

storageAccount.TableEndpoint.AbsoluteUri, 39

storageAccount.Credentials); 39

} 39



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

Visual Basic 40

Public Class GuestBookDataSource 40

... 40

Shared Sub New() 40

storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString") 40

CloudTableClient.CreateTablesFromModel(GetType(GuestBookDataContext), storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials) 40

End Sub 40



End Class 40

Внимание: статический (Shared в Visual Basic) конструктор инициализирует хранилище реквизитами учетной записи, извлекаемыми из файла конфигурации. Затем он вызывает метод CreateTablesFromModel класса CloudTableClient, создающий таблицы на основании описания класса GuestBookDataContext. Использование статического конструктора позволяет выполнить задачи инициализации единожды. 40



Добавьте в класс GuestBookDataSource конструктор, инициализирующий использующийся для доступа к данным класс. 40

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

C# 40

public class GuestBookDataSource 40

{ 40

... 40

public GuestBookDataSource() 40

{ 40

this.context = new GuestBookDataContext(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials); 40

this.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1)); 40

} 41

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

Visual Basic 41

Public Class GuestBookDataSource 41

... 41

Public Sub New() 41

Me.context = New GuestBookDataContext(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials) 41

Me.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1)) 41

End Sub 41



End Class 41

Теперь добавьте метод, возвращающий содержимое таблицы GuestBookEntry. 41

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

C# 41

public class GuestBookDataSource 41

{ 41

... 41

public IEnumerable GetGuestBookEntries() 41

{ 41

var results = from g in this.context.GuestBookEntry 41

where g.PartitionKey == DateTime.UtcNow.ToString("MMddyyyy") 41

select g; 41

return results; 41

} 41

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

Visual Basic 42

Public Class GuestBookDataSource 42

... 42

Public Function GetGuestBookEntries() As IEnumerable(Of GuestBookEntry) 42

Dim results = From g In Me.context.GuestBookEntry _ 42

Where g.PartitionKey = DateTime.UtcNow.ToString("MMddyyyy") _ 42

Select g 42

Return results 42

End Function 42



End Class 42

Внимание: метод GetGuestBookEntries возвращает записи за сегодняшний день, для чего использует LINQ-выражение с отбором по значению свойства PartitionKey. Веб-роль использует этот метод для привязки данных и отображения содержимого гостевой книги. 42



Теперь добавьте метод, добавляющий запись в таблицу GuestBookEntry. 42

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

C# 42

public class GuestBookDataSource 42

{ 42

... 42

public void AddGuestBookEntry(GuestBookEntry newItem) 42

{ 42

this.context.AddObject("GuestBookEntry", newItem); 42

this.context.SaveChanges(); 42

} 42

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

Visual Basic 42

Public Class GuestBookDataSource 42

... 42

Public Sub AddGuestBookEntry(ByVal newItem As GuestBookEntry) 43

Me.context.AddObject("GuestBookEntry", newItem) 43

Me.context.SaveChanges() 43

End Sub 43



End Class 43

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



В заключение добавьте метод, обновляющий URL изображения-миниатюры. 43

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

C# 43

public class GuestBookDataSource 43

{ 43

... 43

public void UpdateImageThumbnail(string partitionKey, string rowKey, string thumbUrl) 43

{ 43

var results = from g in this.context.GuestBookEntry 43

where g.PartitionKey == partitionKey && g.RowKey == rowKey 43

select g; 43

var entry = results.FirstOrDefault(); 43

entry.ThumbnailUrl = thumbUrl; 43

this.context.UpdateObject(entry); 43

this.context.SaveChanges(); 43

} 43



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

Visual Basic 44

Public Class GuestBookDataSource 44

... 44

Public Sub UpdateImageThumbnail(ByVal partitionKey As String, ByVal rowKey As String, ByVal thumbUrl As String) 44

Dim results = From g In Me.context.GuestBookEntry _ 44

Where g.PartitionKey = partitionKey AndAlso g.RowKey = rowKey _ 44

Select g 44

Dim entry = results.FirstOrDefault() 44

entry.ThumbnailUrl = thumbUrl 44

Me.context.UpdateObject(entry) 44

Me.context.SaveChanges() 44

End Sub 44

End Class 44

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



Сохраните файла GuestBookDataSource.cs (для проекта на Visual C#) или GuestBookDataSource.vb (для проекта на Visual Basic). 44

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

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

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

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

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

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



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

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

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

using System.IO; 45

using System.Net; 45

using Microsoft.WindowsAzure; 45

using Microsoft.WindowsAzure.ServiceRuntime; 45

using Microsoft.WindowsAzure.StorageClient; 45

using GuestBook_Data; 45

Imports System.IO 45

Imports System.Net 45

Imports Microsoft.WindowsAzure 45

Imports Microsoft.WindowsAzure.ServiceRuntime 45

Imports Microsoft.WindowsAzure.StorageClient 45

Imports GuestBook_Data 45

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

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

C# 46

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

{ 46

private static bool storageInitialized = false; 46

private static object gate = new Object(); 46

private static CloudBlobClient blobStorage; 46

46

... 46



} 46

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

Visual Basic 46


Каталог: 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
обратиться к администрации

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


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