Разработка облачных бизнес-приложений с использованием Visual Studio LightSwitch 2011

Размещение приложений Silverlight на облачной платформе

Разбить на страницы
Показывать лекцию целиком

Цель лекции: изучение последовательности развертывания приложений Silverlight в облачной среде. А также порядок создания и настройки основных облачных служб и сервера баз данных SQL Azure.

Приложение Silverlight может быть размещено в Microsoft Azure. C точки зрения разработчика использование облачной платформы значительно упрощает механизмы развертывания Silverlight приложений. Так в Azure пропадает необходимость в установке и настройке сервера и настройке доменов на использование из внешней сети, а оплата аппаратных ресурсов осуществляется по факту их реального использования. Для Silverlight особое значение имеет служба хостинга, которая позволяет размещать Silverlight приложения, хранилище, которое используется для размещения различных ресурсов приложения, таких как изображения, видео и файлы, а служба SQL Azure позволяет размещать базу данных приложений.

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

  • Базы данных размещенной в SQL Server R2.
  • Приложения Silverlight размещённого на сервере в виде ASP.Net приложения.
  • На первом этапе развертывания переносится база данных. На рисунке 4.1 представлена схема базы данных которая должна бать размещена в облаке.

    (рис 4.1) Схема базы данных

    В SQL Azure необходимо создать пустую базу данных, для этого необходимо иметь учетную запись в Windows Azure. База данных рассчитана на обработку не очень большого объема информации, то для нее устанавливается тип Web (рис 4.2).

    (рис 4.2) Портал Windows Azure

    После создания базы данных с помощью инструмента http://sqlazuremw.codeplex.com/) можно импортировать существующую схему базы данных и данные в облачную базу (рис 4.3).

    (рис 4.3) Мастер миграции баз данных

    В ходе импорта мастер миграции выполнит анализ существующей базы данных, так как не все элементы базы данных SQL Server могут быть перенесены в облако и анализ выявляет эти проблемы. После определения проблем необходимо вручную внести рекомендуемые исправлению в базу SQL Server и затем можно произвести миграцию.

    В заключении необходимо изменить строку подключения в файле web.config нашего приложений, чтобы она ссылалась на облачную версию базы данных и база данных будет готова к использованию.

    <connectionStrings>
    <add name="CityHotelsEntities" 
    connectionString="metadata=res://*/CityHotelModel.csdl|res://*/CityHotelModel.ssdl|res:
    //*/CityHotelModel.msl;provider=System.Data.SqlClient;provider 
    Connectionstring=quot;data source=vextmrs0m2.database.windows.net;initial 
    catalog=CityHotels;user id=gillcleeren;
    password=SOMEPASSWORD;multipleactiveresultsets=True;App=EntityFrameworkquot;" 
    providerName="System.Data.EntityClient" />
    </connectionStrings>
    

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

    Для переноса этого проекта в облако необходимо добавить новый Windows Azure Project (с именем CityHotelBrowserCloud). Для этого в существующем решении создается проект ASP.Net Role (рис 4.4).

    (рис 4.4) Создание проекта Windows Azure

    Затем в инспекторе созданного проекта необходимо выполните щелчок на папке Roles и выбирать Add Web Role проект и в нем указать ServiceHostingSite (рис 4.5).

    (рис 4.5) Добавление роли

    Создав новую роль мы выполнили конфигурацию нашего экземпляра для выполнения заданного кода.

    Выполнив щелчок правой кнопкой мы можем настроить поведение роли. Например, на приведённом рисунке сконфигурировано два экземпляра, что означает создание двух виртуальных машин выполняющих код независимо. Если в одной произойдет сбой, то будет использована другая, пока сбой не будет ликвидирован, также здесь указывается размер виртуальных машин. Следует помнить, что стоимость использования Azure прямо зависит и от количества виртуальных машин и от используемого ими дискового пространства (рис 4.6).

    (рис 4.6) Настройка Azure

    Затем мы можем опубликовать нашу службу в облаке, для этого правой кнопкой по названию проекта в инспекторе и выбрать ).

    (рис 4.7) Окно развертывания приложения в Azure

    Затем выполняется возврат на портал Azure и выбирается вкладка ).

    (рис 4.8) Создание новой службы развертывания

    После размещения приложения необходимо обновить ссылки в Silverlight приложении на действующие службы данных.

    На данный момент выполнена вся подготовка для переноса самого Silverlight приложения в Azure. Необходимо создать новую веб роль в облачном проекте и установить для нее Silverlight hosting site (CityHotelBrowser.Web). Также можно создать новый облачный проект и добавить соответствующую веб роль в него, что является более грамотным решением, но более дорогостоящее с точки зрения использования ресурсов (рис 4.9).

    (рис 4.9) Список ролей

    После создания второй интернет роли ClientBin будет содержать файл XAP, который был загружен как часть службы хостинга. Таким образом, когда пользователь будет подключаться к приложению через вебсайт, то Silverlight XAP файл будет загружен с облачного сервиса и не с нашего сервера.

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

    Когда мы рассматривали использование RIA services было указано, что между клиентской и серверной частями существует определенная связь. Она строится на том, что внутри приложения Silverlight приложения автоматический создаются прокси классы на основе классов RIA services и клиентская часть должна иметь ссылки на серверную часть (рис 4.10).

    (рис 4.10) Подключение службы WCF RIA

    Для использования служб RIA необходимо, чтобы были подключены ряд специальных базовых классов платформы .Net, ссылки на них автоматически добавляются в проект при его создании в Visual Studio 2010 на основе шаблона RIA service

    System.ServiceModel.DomainServices.EntityFramework 
    System.ServiceModel.DomainServices.Hosting 
    System.ServiceModel.DomainServices.Server 
    System.ComponentModel.DataAnnotations 
    

    Однако, когда мы развертываем приложение в Azure используется виртуальная машина с Windows 2008. с запущенным IIS, но на машине в кэше сборок нет необходимых для описанных классов сборок.

    Поэтому, когда развертываемое приложение использует службы RIA, то необходимо обеспечить включение необходимых сборок в общий контейнер. В рассматриваемом примере это проблему можно решить, если для трех сборок из класса System.ServiceModel.DomainServices установить свойство Copy Local в True, тем самым указывается, что эти сборки будут загружаться не из глобального кэша сборок, а из директории bin приложения. Эта операция увеличивает размер публикуемого контейнера (рис 4.11).

    (рис 4.11) Установка свойства

    Других особенностей использования служб RIA нет и для их использования не требуется дополнительных настроек в Azure.

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

    Для того, чтобы сохранить файл в бинарном хранилище и использовать их затем в приложениях Silverlight следует сначала создать с использованием портала Azure учетную запись. У каждой учетной записи Windows Azure может быть несколько учетных записей для хранилища и в каждой такой учётной записи может сохранятся до 100 Тб информации (рис 4.12).

    (рис 4.12) Создание учётной записи хранилища

    После создания новой учетной записи разработчик получает три (для каждого из типов служб) URL хранилища (рис 4.13).

    (рис 4.13) Ссылки на Url хранилища

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

    (рис 4.14) Создание контейнеров

    Для контейнера определяются права доступа. Файл может быть либо публично доступным, либо приватным. Для публичных файлов и их контейнеров необходимо установить уровень доступа ).

    (рис 4.15) Ссылка на файл в хранилище

    Например, если у нас в приложении сохраняется файл содержащий медиа контент (изображении, видео, аудио) то для его использования можно воспользоватся следующим кодом.

    <Grid x:Name="LayoutRoot">
    <MediaElement Width="300" Height="200" Stretch="Uniform" 
    Source="http://gillcleeren.blob.core.windows.net/test/Butterfly.wmv" 
    AutoPlay="True"></MediaElement>
    </Grid>
    

    При сохранении XML файлов в облачном хранилище возникают сложности, если затем попытаемся прочитать сохраненный файл из приложения Silverlight. Это связано с нарушением ограничений на межтеменные взаимодействия. Для решения данной проблемы необходимо поместить в корневой каталог хранилища файл clientaccesspolicy.xml.

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

    (рис 4.16) Файл сохраненный в корневой папке

    После этих манипуляций из приложения Silverlight можно использовать XML файл по ссылке на него в хранилище. Сам код стандартный.

    private void LoadTrendingTopics()
    {
    WebClient client = new WebClient();
    client.DownloadStringCompleted += 
    new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
    client.DownloadStringAsync(new Uri("http://gillcleeren.blob.core.windows.net/test/trendingtopics.xml", 
    UriKind.Absolute));
    }
     
    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument document = XDocument.Parse(e.Result);
            List<Trend> twitterData = (from status in ocument.Descendants("trend")
                                       select new Trend
                                       {
                                           TrendingTopic = status.Value,
                                           Url = status.LastAttribute.Value
                                       }).ToList();
     
            TrendingTopicListBox.ItemsSource = twitterData;
        }
        else
        {
            MessageBox.Show(e.Error.ToString());
        }
    }
    

    Ранее указывалось, что невозможно просто обновить XAP файл в службе хостинга, так как это приведет к обновлению проекта и созданию его новой версии. Решение данной проблемы состоит в том, что можно поместить этот файл в хранилище blob. Для этого необходимо сделать следующее:

  • Создать отдельный контейнер для хранения фала XAP (рис 4.17). (рис 4.17) Созданный контейнер
  • Поместить существующий файл XAP в хранилище с помощью Cloud Explorer (рис 4.18). (рис 4.18) Файл помещенный в контейнер
  • Обновить URL в проекте ASP.Net
    <div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2"
    width="100%" height="100%">
    <param name="source" 
    value="http://gillcleeren.blob.core.windows.net/xap/RemoteXap.xap" />
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50826.0" />
    
  • Опубликовать хостинг сайт под Web ролью в Azurе. Используя указанный подход значительно упрощается обновление XAP и не требуется его повторная публикация. .
  • В заключении следует отметить, что Silverlight является одной из платформ, которая может использоваться для создания приложений Windows Phone. Возможность размещения указанных приложений в Azure является удобным и эффективным механизмом размещения приложения для телефона

    Краткие итоги

  • Приложение Silverlight может быть размещено в Microsoft Azure.
  • Размещение должно осуществляться в определенной последовательности: переносится и настраивается база данных, настраивается хранилище, настраивается приложение и его библиотеки.
  • Для использования служб RIA из облака необходимо выполнить ряд настроек связанных с размещением в облаке дополнительных библиотек.
  • Хранилище обеспечивают удобный и масштабируемый механизм хранения данных,
  • Для загрузки файлов в облачное хранилище, а необходимо использовать специальные инструменты CloudBerry или CloudExplorer
  • При использовании XML файлов в облачном хранилище требуется настройка междоменного взаимодействия.
  • Страницы:

    Цель лекции: изучение последовательности развертывания приложений Silverlight в облачной среде. А также порядок создания и настройки основных облачных служб и сервера баз данных SQL Azure.

    Приложение Silverlight может быть размещено в Microsoft Azure. C точки зрения разработчика использование облачной платформы значительно упрощает механизмы развертывания Silverlight приложений. Так в Azure пропадает необходимость в установке и настройке сервера и настройке доменов на использование из внешней сети, а оплата аппаратных ресурсов осуществляется по факту их реального использования. Для Silverlight особое значение имеет служба хостинга, которая позволяет размещать Silverlight приложения, хранилище, которое используется для размещения различных ресурсов приложения, таких как изображения, видео и файлы, а служба SQL Azure позволяет размещать базу данных приложений.

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

  • Базы данных размещенной в SQL Server R2.
  • Приложения Silverlight размещённого на сервере в виде ASP.Net приложения.
  • На первом этапе развертывания переносится база данных. На рисунке 4.1 представлена схема базы данных которая должна бать размещена в облаке.

    (рис 4.1) Схема базы данных

    В SQL Azure необходимо создать пустую базу данных, для этого необходимо иметь учетную запись в Windows Azure. База данных рассчитана на обработку не очень большого объема информации, то для нее устанавливается тип Web (рис 4.2).

    (рис 4.2) Портал Windows Azure

    После создания базы данных с помощью инструмента http://sqlazuremw.codeplex.com/) можно импортировать существующую схему базы данных и данные в облачную базу (рис 4.3).

    (рис 4.3) Мастер миграции баз данных

    В ходе импорта мастер миграции выполнит анализ существующей базы данных, так как не все элементы базы данных SQL Server могут быть перенесены в облако и анализ выявляет эти проблемы. После определения проблем необходимо вручную внести рекомендуемые исправлению в базу SQL Server и затем можно произвести миграцию.

    В заключении необходимо изменить строку подключения в файле web.config нашего приложений, чтобы она ссылалась на облачную версию базы данных и база данных будет готова к использованию.

    <connectionStrings>
    <add name="CityHotelsEntities" 
    connectionString="metadata=res://*/CityHotelModel.csdl|res://*/CityHotelModel.ssdl|res:
    //*/CityHotelModel.msl;provider=System.Data.SqlClient;provider 
    Connectionstring=quot;data source=vextmrs0m2.database.windows.net;initial 
    catalog=CityHotels;user id=gillcleeren;
    password=SOMEPASSWORD;multipleactiveresultsets=True;App=EntityFrameworkquot;" 
    providerName="System.Data.EntityClient" />
    </connectionStrings>
    

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

    Для переноса этого проекта в облако необходимо добавить новый Windows Azure Project (с именем CityHotelBrowserCloud). Для этого в существующем решении создается проект ASP.Net Role (рис 4.4).

    (рис 4.4) Создание проекта Windows Azure

    Затем в инспекторе созданного проекта необходимо выполните щелчок на папке Roles и выбирать Add Web Role проект и в нем указать ServiceHostingSite (рис 4.5).

    (рис 4.5) Добавление роли

    Создав новую роль мы выполнили конфигурацию нашего экземпляра для выполнения заданного кода.

    Выполнив щелчок правой кнопкой мы можем настроить поведение роли. Например, на приведённом рисунке сконфигурировано два экземпляра, что означает создание двух виртуальных машин выполняющих код независимо. Если в одной произойдет сбой, то будет использована другая, пока сбой не будет ликвидирован, также здесь указывается размер виртуальных машин. Следует помнить, что стоимость использования Azure прямо зависит и от количества виртуальных машин и от используемого ими дискового пространства (рис 4.6).

    (рис 4.6) Настройка Azure

    Затем мы можем опубликовать нашу службу в облаке, для этого правой кнопкой по названию проекта в инспекторе и выбрать ).

    (рис 4.7) Окно развертывания приложения в Azure

    Затем выполняется возврат на портал Azure и выбирается вкладка ).

    (рис 4.8) Создание новой службы развертывания

    После размещения приложения необходимо обновить ссылки в Silverlight приложении на действующие службы данных.

    На данный момент выполнена вся подготовка для переноса самого Silverlight приложения в Azure. Необходимо создать новую веб роль в облачном проекте и установить для нее Silverlight hosting site (CityHotelBrowser.Web). Также можно создать новый облачный проект и добавить соответствующую веб роль в него, что является более грамотным решением, но более дорогостоящее с точки зрения использования ресурсов (рис 4.9).

    (рис 4.9) Список ролей

    После создания второй интернет роли ClientBin будет содержать файл XAP, который был загружен как часть службы хостинга. Таким образом, когда пользователь будет подключаться к приложению через вебсайт, то Silverlight XAP файл будет загружен с облачного сервиса и не с нашего сервера.

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

    Когда мы рассматривали использование RIA services было указано, что между клиентской и серверной частями существует определенная связь. Она строится на том, что внутри приложения Silverlight приложения автоматический создаются прокси классы на основе классов RIA services и клиентская часть должна иметь ссылки на серверную часть (рис 4.10).

    (рис 4.10) Подключение службы WCF RIA

    Для использования служб RIA необходимо, чтобы были подключены ряд специальных базовых классов платформы .Net, ссылки на них автоматически добавляются в проект при его создании в Visual Studio 2010 на основе шаблона RIA service

    System.ServiceModel.DomainServices.EntityFramework 
    System.ServiceModel.DomainServices.Hosting 
    System.ServiceModel.DomainServices.Server 
    System.ComponentModel.DataAnnotations 
    

    Однако, когда мы развертываем приложение в Azure используется виртуальная машина с Windows 2008. с запущенным IIS, но на машине в кэше сборок нет необходимых для описанных классов сборок.

    Поэтому, когда развертываемое приложение использует службы RIA, то необходимо обеспечить включение необходимых сборок в общий контейнер. В рассматриваемом примере это проблему можно решить, если для трех сборок из класса System.ServiceModel.DomainServices установить свойство Copy Local в True, тем самым указывается, что эти сборки будут загружаться не из глобального кэша сборок, а из директории bin приложения. Эта операция увеличивает размер публикуемого контейнера (рис 4.11).

    (рис 4.11) Установка свойства

    Других особенностей использования служб RIA нет и для их использования не требуется дополнительных настроек в Azure.

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

    Для того, чтобы сохранить файл в бинарном хранилище и использовать их затем в приложениях Silverlight следует сначала создать с использованием портала Azure учетную запись. У каждой учетной записи Windows Azure может быть несколько учетных записей для хранилища и в каждой такой учётной записи может сохранятся до 100 Тб информации (рис 4.12).

    (рис 4.12) Создание учётной записи хранилища

    После создания новой учетной записи разработчик получает три (для каждого из типов служб) URL хранилища (рис 4.13).

    (рис 4.13) Ссылки на Url хранилища

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

    (рис 4.14) Создание контейнеров

    Для контейнера определяются права доступа. Файл может быть либо публично доступным, либо приватным. Для публичных файлов и их контейнеров необходимо установить уровень доступа ).

    (рис 4.15) Ссылка на файл в хранилище

    Например, если у нас в приложении сохраняется файл содержащий медиа контент (изображении, видео, аудио) то для его использования можно воспользоватся следующим кодом.

    <Grid x:Name="LayoutRoot">
    <MediaElement Width="300" Height="200" Stretch="Uniform" 
    Source="http://gillcleeren.blob.core.windows.net/test/Butterfly.wmv" 
    AutoPlay="True"></MediaElement>
    </Grid>
    

    При сохранении XML файлов в облачном хранилище возникают сложности, если затем попытаемся прочитать сохраненный файл из приложения Silverlight. Это связано с нарушением ограничений на межтеменные взаимодействия. Для решения данной проблемы необходимо поместить в корневой каталог хранилища файл clientaccesspolicy.xml.

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

    (рис 4.16) Файл сохраненный в корневой папке

    После этих манипуляций из приложения Silverlight можно использовать XML файл по ссылке на него в хранилище. Сам код стандартный.

    private void LoadTrendingTopics()
    {
    WebClient client = new WebClient();
    client.DownloadStringCompleted += 
    new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
    client.DownloadStringAsync(new Uri("http://gillcleeren.blob.core.windows.net/test/trendingtopics.xml", 
    UriKind.Absolute));
    }
     
    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument document = XDocument.Parse(e.Result);
            List<Trend> twitterData = (from status in ocument.Descendants("trend")
                                       select new Trend
                                       {
                                           TrendingTopic = status.Value,
                                           Url = status.LastAttribute.Value
                                       }).ToList();
     
            TrendingTopicListBox.ItemsSource = twitterData;
        }
        else
        {
            MessageBox.Show(e.Error.ToString());
        }
    }
    

    Ранее указывалось, что невозможно просто обновить XAP файл в службе хостинга, так как это приведет к обновлению проекта и созданию его новой версии. Решение данной проблемы состоит в том, что можно поместить этот файл в хранилище blob. Для этого необходимо сделать следующее:

  • Создать отдельный контейнер для хранения фала XAP (рис 4.17). (рис 4.17) Созданный контейнер
  • Поместить существующий файл XAP в хранилище с помощью Cloud Explorer (рис 4.18). (рис 4.18) Файл помещенный в контейнер
  • Обновить URL в проекте ASP.Net
    <div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2"
    width="100%" height="100%">
    <param name="source" 
    value="http://gillcleeren.blob.core.windows.net/xap/RemoteXap.xap" />
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50826.0" />
    
  • Опубликовать хостинг сайт под Web ролью в Azurе. Используя указанный подход значительно упрощается обновление XAP и не требуется его повторная публикация. .
  • В заключении следует отметить, что Silverlight является одной из платформ, которая может использоваться для создания приложений Windows Phone. Возможность размещения указанных приложений в Azure является удобным и эффективным механизмом размещения приложения для телефона

    Краткие итоги

  • Приложение Silverlight может быть размещено в Microsoft Azure.
  • Размещение должно осуществляться в определенной последовательности: переносится и настраивается база данных, настраивается хранилище, настраивается приложение и его библиотеки.
  • Для использования служб RIA из облака необходимо выполнить ряд настроек связанных с размещением в облаке дополнительных библиотек.
  • Хранилище обеспечивают удобный и масштабируемый механизм хранения данных,
  • Для загрузки файлов в облачное хранилище, а необходимо использовать специальные инструменты CloudBerry или CloudExplorer
  • При использовании XML файлов в облачном хранилище требуется настройка междоменного взаимодействия.
  • Вернуться к учебному плану