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


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



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

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


    1. В данной задаче вы создадите новый проект типа Cloud Service (облачный сервис).

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

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

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

В диалоге 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 для создания проекта.





Рисунок

      1. Создание нового проекта для Windows Azure (C#)

Рисунок

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

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

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





Рисунок

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

Рисунок

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



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



Рисунок

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

Рисунок

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



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

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

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


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


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

Дополнительно к используемым вашей моделью свойствам каждая сущность в табличном хранилище должна иметь два ключевых свойства: PartitionKey и RowKey. Вместе эти два свойства формируют первичный ключ и уникально идентифицируют каждую сущность в таблице. Кроме того, каждая сущность имеет системное свойство Timestamp, используемое службой для хранения даты последних изменений. Данное поле предназначено для служебного использования и не может изменяться внутри приложения. Программный интерфейс Table Storage client API предоставляет класс TableServiceEntity, в котором уже определены необходимые свойства. Хотя вы можете унаследовать от него ваш собственный класс, это не является обязательным условием.

Программный интерфейс Table service API совместим с предоставляемым технологией WCF Data Services (ранее она называлась ADO.NET Data Services Framework) протоколом REST API, что позволяет использовать библиотеку WCF Data Services Client Library (ранее она называлась .NET Client Library) и работать с табличным хранилищем с использованием объектов .NET.

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

Чтобы работать с данными в хранилище с использованием WCF Data Services Client Library, необходимо определить класс, наследующий от TableServiceContext, в свою очередь являющийся потомком описанного в WCF Data Services класса DataServiceContext. Интерфейс Table Storage API позволяет приложениям создавать таблицы на основании описанных контекстных классов. Чтобы это стало возможным, каждый контекстный класс должен публиковать таблицы как свойства типа IQueryable<SchemaClass>, где SchemaClass – конкретный класс, описывающий хранящуюся в таблице сущность.

В этой задаче вы создадите схему для хранения сущностей, которая потребуется для приложения GuestBook. Затем вы создадите классы, которые позволят использовать WCF Data Services для доступа к табличному хранилищу. В завершение задачи вы создадите объект, который будет использоваться элементами управления ASP.NET и предоставит функциональность чтения, обновления и удаления записей.

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

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



Рисунок

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

Рисунок



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

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

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

Рисунок

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

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

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

Рисунок

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

Рисунок

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

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

C#

using Microsoft.WindowsAzure.StorageClient;



Visual Basic

Imports Microsoft.WindowsAzure.StorageClient

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

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



C#

public class GuestBookEntry

: Microsoft.WindowsAzure.StorageClient.TableServiceEntity

{

}



Visual Basic

Public Class GuestBookEntry

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceEntity

End Class



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

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

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

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

C#

public GuestBookEntry()

{

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



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

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

}

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

Visual Basic

Public Sub New()

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

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

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

End Sub

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

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

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

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

C#

public string Message { get; set; }

public string GuestName { get; set; }

public string PhotoUrl { get; set; }

public string ThumbnailUrl { get; set; }

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

Visual Basic

Public Property Message As String

Public Property GuestName As String

Public Property PhotoUrl As String

Public Property ThumbnailUrl As String

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

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

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

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

C#

public class GuestBookDataContext

: Microsoft.WindowsAzure.StorageClient.TableServiceContext

{

}



Visual Basic

Public Class GuestBookDataContext

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext

End Class

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

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

C#

public class GuestBookDataContext

: Microsoft.WindowsAzure.StorageClient.TableServiceContext

{

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



: base(baseAddress, credentials)

{ }

}

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



Visual Basic

Public Class GuestBookDataContext

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext

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

MyBase.New(baseAddress, credentials)

End Sub

End Class



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

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

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

C#

public class GuestBookDataContext

: Microsoft.WindowsAzure.StorageClient.TableServiceContext

{

...


public IQueryable<GuestBookEntry> GuestBookEntry

{

get

{

return this.CreateQuery<GuestBookEntry>("GuestBookEntry");

}

}

}

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



Visual Basic

Public Class GuestBookDataContext

Inherits Microsoft.WindowsAzure.StorageClient.TableServiceContext

...


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

Get

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

End Get

End Property

End Class



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

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

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

C#

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.StorageClient;



Visual Basic

Imports Microsoft.WindowsAzure

Imports Microsoft.WindowsAzure.StorageClient

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

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

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

C#

public class GuestBookDataSource

{

private static CloudStorageAccount storageAccount;



private GuestBookDataContext context;

}

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



Visual Basic

Public Class GuestBookDataSource



Private Shared storageAccount As CloudStorageAccount

Private context As GuestBookDataContext

End Class

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

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

C#

public class GuestBookDataSource

{

...



static GuestBookDataSource()

{

storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

CloudTableClient.CreateTablesFromModel(

typeof(GuestBookDataContext),

storageAccount.TableEndpoint.AbsoluteUri,

storageAccount.Credentials);

}

}

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



Visual Basic

Public Class GuestBookDataSource

...

Shared Sub New()



storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString")

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

End Sub

End Class

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

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

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

C#

public class GuestBookDataSource

{

...



public GuestBookDataSource()

{

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

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

}

}

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



Visual Basic

Public Class GuestBookDataSource

...

Public Sub New()



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

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

End Sub

End Class

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

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

C#

public class GuestBookDataSource

{

...


public IEnumerable<GuestBookEntry> GetGuestBookEntries()

{

var results = from g in this.context.GuestBookEntry

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

select g;

return results;

}

}

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



Visual Basic

Public Class GuestBookDataSource

...

Public Function GetGuestBookEntries() As IEnumerable(Of GuestBookEntry)



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

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

Select g

Return results

End Function

End Class



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

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

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

C#

public class GuestBookDataSource

{

...



public void AddGuestBookEntry(GuestBookEntry newItem)

{

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

this.context.SaveChanges();

}

}

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



Visual Basic

Public Class GuestBookDataSource

...

Public Sub AddGuestBookEntry(ByVal newItem As GuestBookEntry)



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

Me.context.SaveChanges()

End Sub

End Class



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

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

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

C#

public class GuestBookDataSource

{

...



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

{

var results = from g in this.context.GuestBookEntry

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

select g;

var entry = results.FirstOrDefault<GuestBookEntry>();

entry.ThumbnailUrl = thumbUrl;

this.context.UpdateObject(entry);

this.context.SaveChanges();

}

}

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



Visual Basic

Public Class GuestBookDataSource

...

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



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

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

Select g

Dim entry = results.FirstOrDefault()

entry.ThumbnailUrl = thumbUrl

Me.context.UpdateObject(entry)

Me.context.SaveChanges()

End Sub

End Class



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

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



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

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


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