Блог Сергея Байдачного

Мой блог о технологиях

Archive for Март 2011

Как попробовать Windows Azure бесплатно

3 комментария

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

Хочу сразу прояснить ситуацию со временем работы аккаунта, так как мы получаем много запросов о том, что 24 часа мало, чтобы опробовать все возможности. 24 часа означают, что через указанное время, Ваши данные будут удалены из Windows Azure, но вы сможете зарезервировать для себя новое окружение (опять на 24 часа). Таким образом, Вы можете заниматься исследованием возможностей Windows Azure хоть круглый год. Ограничение в 24 часа гарантируют для нас две вещи: 1). Вы не будете использовать выданный аккаунт в коммерческих целях; 2). Наши ресурсы будут использоваться оптимальным образом. Ведь попробовав какую-то функциональность, Вы можете вернуться к своему аккаунту через длительный промежуток времени, не остановив ненужные Вам службы (ведь Вы за это все равно не платите).

Резюмирую все вышесказанное: ограничений по времени доступа в Azure НЕТ, а есть только время жизни выделенного окружения. Через каждые 24 часа Вы активируете для себя новое окружение и продолжаете работать.

Теперь о том, как вести работу в рамках данной программы.

Для начала Вам нужно ввести уникальный идентификатор (любой, но лучше емейл), по которому система будет распознавать Вас как существующего пользователя и пропускать страницу регистрации. Если бы на нашем сайте была система аутентификации, то этот шаг можно было бы опустить, но раз ее нет, то введите емейл и нажмите кнопку «получить доступ»

image

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

image

Если Вы не из Украины, то также можете выполнить регистрацию (сделаете мне метрику). Страну мы не проверяем, но интерфейс на украинском.

Далее Вы попадаете в окно, позволяющее выделить окружение (Hosted Service).

Важно! По данной программе Вы получаете в пользование 3 экземпляра. Поэтому можете реализовать сколь угодно сложные сценарии в своем окружении. О том, как управлять несколькими экземплярами смотрите в моем предыдущем посте.

Важно! Выделив окружение и развернув пакет, Вы инициализируете и запускаете Ваши роли. Как только Вы хотите обновить роли, то первым делом необходимо удалить существующее окружение и создать новое. Необходимые кнопки есть в интерфейсе, НО, Вам придется подождать до 5 минут, пока старое окружение будет удалено. Все это время, кнопка, позволяющая создать новое окружение, будет недоступна.

Итак, жмем кнопку «Резервировать» и переходим к следующему окну.

image

На этом этапе ничего выбрать нельзя, но Вы можете посмотреть, что Вы получаете под созданной учетной записью. Как я и говорил, несмотря на один Hosted Service, Вы будете иметь доступ к трем экземплярам (тут это почему-то не написано, но я допишу, потом, может быть).

Жмем «Дальше» и переходим к панели управления Вашим окружением.

image

Итак, мы имеем три закладки, на каждой из которых представлена информация о различных составляющих Windows Azure:

· Закладка Службы. Тут Вы сможете видеть все Ваши роли и их статус (до трех различных ролей). Тут же Вы можете удалить Ваше окружение или перейти к созданию нового.

· Закладка Storage Service. Тут для Вас уже создан активный аккаунт и Вы можете получить его имя, а также первичный и вторичный ключи, которые позволяют взаимодействовать Вашему приложению с таблицами, очередями и блобами, поддерживаемыми Storage службой.

· Закладка SQL Azure. Тут Вы можете получить строку соединения, позволяющую Вам получить доступ к SQL Azure как через SQL Management Studio, так и из Ваших приложений. В SQL Management Studio Вы создаете все необходимые таблицы, процедуры и связи, ну а затем используете все это добро в приложениях.

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

Итак, прежде чем переходить к развертыванию ролей, необходимо иметь какой-то готовый проект. Чтобы поэкспериментировать, Вы можете скачать Windows Azure Training Kit и выполнять примеры оттуда.

Имея проект в Visual Studio, Вам необходимо создать пакет. Для используем команду Publish (хотя ничего и не публикуем) и выбираем Create Service Package Only.

image

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

Остается только опубликовать пакет. Для этого возвращаемся в панель и Выбираем «Развернуть…»

Указываете путь к Вашему пакету и конфигурационному файлу и нажимаете «Развернуть».

Вот и все. На закладке Служба, Вы можете наблюдать за инициализацией и состоянием Ваших ролей.

Наслаждайтесь.

Реклама

Written by Sergiy Baydachnyy

29.03.2011 at 12:53

Опубликовано в Windows Azure

Tagged with ,

Управление экземплярами в Windows Azure

5 комментариев

Сегодня Microsoft предлагает несколько способов, позволяющих получить доступ к Windows Azure на бесплатной основе. В Украине Вы можете получить доступ на 24-часа и 30 дней, не считая MSDN и возможностей, предлагаемых на http://azure.com. Однако, особенность первых двух программ состоит в том, что Вам не нужно вводить данные кредитной карты, что не позволит Вам перерасходовать лимит предоставляемых возможностей (хоть и случайно).

Все реализуемые программы направлены на то, чтобы разработчики могли ознакомиться с платформой и попробовать основные возможности. Аналогично, бесплатный доступ можно использовать и для организации учебных курсов или внедрения лабораторных по Windows Azure в образовательный процесс ВУЗа.

Основное ограничение предлагаемых программ, это предоставление только одного Hosted Service. Под Hosted Service мы будем понимать некое виртуальное окружение разработчика, позволяющее развернуть пакет и конфигурационный файл в Облако, задать сертификаты для организации https, поддерживать работы ролей. При этом Hosted Service обладает DNS (например, dev-club.cloudapp.net).

image

Как я уже отметил, по тестовым программам предоставляется только один Hosted Service, что может навести на мысль о том, что попробовать развернуть сложное решение не получится. Например, я хочу развернуть решение, содержащее веб-сайт, веб-службы и рабочую роль. Подобное решение я могу разрабатывать как независимые службы, разворачиваемые и конфигурируемые в отдельных пакетах. В этом случае нам необходимо иметь три Hosted Services. Однако следует обращать внимание не на количество Hosted Services, а на количество экземпляров (серверов), предоставляемых внутри одного Hosted Service. По предлагаемым программам их 3.

Обычно несколько экземпляров внутри одного окружения используются для организации масштабирования. Например, Ваш сайт не справляется с нагрузкой, и Вы добавляете в Ваше окружение еще несколько экземпляров, что позволяет увеличить нагрузку. Но в условиях «дефицита» Hosted Services Вы можете все Ваши компоненты конфигурировать и разворачивать как один пакет, размещая различные роли на различных экземплярах. Таким образом, имея три экземпляра в своем распоряжении, я могу развернуть до трех различных ролей. Более трех ролей развернуть нельзя, так как каждая роль должна владеть своим экземпляром (хотя для веб-сайтов есть свои особенности, которые мы также рассмотрим).

Итак, если Вы решили развернуть несколько ролей внутри одного окружения, то от Вас особо ничего и не требуется. Создайте новый Windows Azure Project в Visual Studio (или Web Developer Express) и добавьте необходимые роли к проекту (сразу или в процессе).

image

Все дело в конфигурации. Visual Studio тут же конфигурирует Ваши роли для развертывания в одном Hosted Service, на разные экземпляры. Рассмотрим сгенерированные конфигурационные файлы.

Конфигурационным файлом, настраивающим Ваше окружение (Hosted Service) является ServiceConfiguration.csсfg. Именно тут указывается, какие роли будут развернуты и какое количество экземпляров должно быть выделено для каждой роли. Обращаю Ваше внимание на то, что данный файл разворачивается отдельно от пакета и может быть модифицирован в процессе работы окружения. Например, Вам необходимо увеличить количество экземпляров под рабочую роль, Вы просто изменяете атрибут count в элементе Instances. Последнее можно выполнить через панель управления службами или с помощью специального API.

Второй конфигурационный файл ServiceDefinition.csdef используется для более гибкой конфигурации каждой роли. Например, Вы развернули две Web роли. Поскольку для окружения выдается одно имя DNS, то логично, что одна из Web ролей сможет работать на 80 порту, а вторая на любом другом (оба сайта на 80 порту работать не могут под одним DNS). Именно подобные настройки и конфигурируются в этом файле. Поскольку любые изменения в ServiceDefinition.csdef кардинально влияют на работу окружения, то файл разворачивается внутри пакета и не может быть модифицирован в процессе работы окружения. Если Вы решили что-то поменять, то необходимо выполнить повторное развертывание пакета в Ваше окружение, что приведет к временной его остановке.

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

image

Несмотря на обилие конфигурационных элементов, сейчас нас будут интересовать лишь два, это Sites и Endpoints.

С помощью элемента Endpoints (или соответствующей вкладки мастера), Вы можете определить параметры доступа к роли через DNS, указав порт, протокол (http или https), закрыв или открыв роль для доступа снаружи. Наиболее интересным параметром является порт. Именно возможность указать порт позволяет организовать работу нескольких служб в рамках одного DNS. Если Вы не планируете получать доступ к роли (например, у вас есть Рабочая роль, которая обрабатывает очередь сообщений, но не предусматривает прямой коммуникации), то элементы Endpoint могут полностью отсутствовать. Создав необходимые роль, внимательно посмотрите, правильно ли Visual Studio расставил порты и, при необходимости, поправьте их.

Обратите внимание, что для Web ролей конкретный Endpoint прописывается с помощью элемента Binding:

   1:      <Sites>
   2:        <Site name="Web">
   3:          <Bindings>
   4:            <Binding name="Endpoint1" endpointName="Endpoint1" />
   5:          </Bindings>
   6:        </Site>
   7:      </Sites>
   

Если Вы были достаточно внимательными, то у Вас должен был возникнуть вопрос, почему мы можем задать целую коллекцию Endpoints или Sites для одной Web роли, ведь веб-приложение у нас одно. И вот тут мы рассмотрим еще одну возможность, позволяющую Вам использовать выделенные экземпляры на полную – создание нескольких веб-сатов или виртуальных приложений внутри одной Web роли.

Начиная с конца прошлого года, Web роли в Windows Azure стали размещать под управлением полноценного Internet Information Service (Full IIS). А раз мы имеем дело с полноценным IIS, то создавать веб-сайт или виртуальную директорию внутри одной роли можно без особых проблем.

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

Первым делом добавьте новый Web Site в Ваш проект. Этот сайт не будет добавлен как отдельная Web роль, да и в финальный пакет пока входить не будет. Поскольку Вы вряд ли решите разворачивать в Azure исходный код, выполните команду Publish Web Site, задав директорию для выходных файлов, готовых для развертывания (вероятнее всего Вы прекомпилируете все файлы). Вот эту директорию и можно использовать как исходную для развертывания еще одного веб-сайта.

На втором этапе необходимо модифицировать ServiceDefinition.csdef, тут Вы добавляете внутрь уже существующей Web роли еще один раздел Site, где указываете стандартные параметры (имя, Endpoint):

   1:        <Site name="Web" physicalDirectory="..\PrecompiledWeb\WebSite3">
   2:          <Bindings>
   3:            <Binding name="Endpoint1" endpointName="Endpoint1" 
   4:               hostHeader="www.dev-club.com.ua" />
   5:          </Bindings>
   6:        </Site>
 

Вот этот блок и позволяет включить подготовленный сайт в Ваш проект. При этом, Вы можете совершенно спокойно использовать один и тот же Endpoint для нескольких приложений, задав атрибут hostHeader, где указываете имя хоста, которое будет использоваться для доступа к сайту. Аналогичный подход можно использовать, если Вы хотите создать несколько сайтов, ссылающихся на одну физическую директорию (причем все они создаются под управлением различных Application Pool).

Таким образом, несколько сайтов на одном экземпляре – не проблема. Вот только нужно сделать какие-то вещи «руками».

Аналогично можно разворачивать и виртуальные директории внутри любого из сайтов. Для этого используется два элемента: VirtualApplication, позволяющий задать имя виртуальной директории, а также путь к физическому каталогу; VirtualDirectory – используется внутри VirtualApplication и позволяет сформировать структуру виртуальных директорий виртуального приложения.

Таким образом, используя три экземпляра, Вы можете создавать любое количество сайтов и веб-служб на одном из них, а два экземпляра у Вас еще остаются для развертывания Рабочей роли (или двух), а также для масштабирования решенияJ

Чтобы увидеть все эти вещи в действии, Вы можете использовать скрипты из Windows Azure Training Kit, а также посетить наш Online training по Windows Azure.

Written by Sergiy Baydachnyy

29.03.2011 at 11:18

Опубликовано в Windows Azure

Tagged with ,

Windows Phone 7: Application Bar

3 комментария

Глупая привычка, пришедшая с опытом создания Windows и Web приложений – создание всех интерфейсных элементов в окне приложения. Я сам на это купился, создавая свое первое приложение для Windows Phone 7 – Пятнашки. В основном окне этого приложения есть две кнопки: Refresh и About. Выглядят они странно (особенно About) и явно лишними. И все хорошо, пока в Вашем приложении нет полей редактирования, инициирующих вызов клавиатуры, закрывающей часть необходимых кнопок. Представьте приложение, имеющее поле редактирования на весь экран, а внизу экрана кнопку Send, позволяющую отправить сообщение. При вводе текста, кнопка Send будет перекрыта клавиатурой, а начинающий пользователь будет ломать голову, что с этим делать и как добраться до кнопки. Именно поэтому, Windows Phone 7 приложения имеют возможность использовать специальную панель для элементов управления Application Bar.

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

Application Bar не может быть перекрыт клавиатурой или другими элементами, а при вызове «сдвигает» весь интерфейс. Правда это происходит в том случае, если прозрачность установлена в 1. Если прозрачность установлена в значение меньшее 1, то Application Bar начинает перекрывать экран, используя эффект прозрачности.

Итак, попробуем создать простой Application Bar. Первое, что необходимо сделать, это определиться с иконками. Некоторые иконки доступны в папке C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Icons\dark, а остальные нужно нарисовать самостоятельно. При создании иконки есть несколько рекомендаций: 1). Иконку рисуют белым цветом на прозрачном фоне. При изменении темы, такая практика позволяет сделать иконку видимой для пользователя; 2). Размер иконки должен быть 48 на 48 пикселей, но все, что Вы нарисовали, нужно уместить в прямоугольник 26 на 26 пикселей и расположить изображение по центру. Все от того, что любое изображение будет заключено в окружность радиусом 14. Если Ваше изображение будет больше, то возникнут пересечения.

Итак, чтобы добавить кнопку Refresh и About в Application Bar приложения, достаточно в MainPage.xaml добавить следующий код:

   1:      <phone:PhoneApplicationPage.ApplicationBar>
   2:          <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
   3:              <shell:ApplicationBarIconButton 
       IconUri="/Images/appbar.refresh.rest.png"  
       Text="Refresh" Click="ClickRefresh"/>
   4:              <shell:ApplicationBarIconButton 
       IconUri="/Images/appbar.questionmark.rest.png" 
       Text="About" Click="ClickAbout"/>
   5:          </shell:ApplicationBar>
   6:      </phone:PhoneApplicationPage.ApplicationBar>
 

Иконки я выбрал из SDK, установив Build Action в Content и Copy to Output Directory в Copy Always.

Вот такая панель у нас получилась:

clip_image001[1]

Естественно, чтобы панель работала, необходимо реализовать обработчики событий ClickAbout и ClickRefresh.

Добавим к этой панели возможность выбора языка интерфейса. Для этого расширим Application Bar двумя пунктами меню:

   1:      <phone:PhoneApplicationPage.ApplicationBar>
   2:          <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
   3:              <shell:ApplicationBarIconButton 
        IconUri="/Images/appbar.refresh.rest.png"  Text="Refresh" Click="ClickRefresh"/>
   4:              <shell:ApplicationBarIconButton 
        IconUri="/Images/appbar.questionmark.rest.png" Text="About" Click="ClickAbout"/>
   5:              <shell:ApplicationBar.MenuItems>
   6:                  <shell:ApplicationBarMenuItem Text="Russian" 
        Click="SetLanguageClick"></shell:ApplicationBarMenuItem>
   7:                  <shell:ApplicationBarMenuItem Text="English" 
        Click="SetLanguageClick"></shell:ApplicationBarMenuItem>
   8:              </shell:ApplicationBar.MenuItems>
   9:          </shell:ApplicationBar>
  10:      </phone:PhoneApplicationPage.ApplicationBar>

 

В результате мы увидим следующую панель:

clip_image002[1]

Нужно сказать, что меню в Application Bar очень часто не оправдывают себя. С таким же успехом я мог бы разместить кнопку Language и переводить пользователя на отдельную страницу, по выбору языка.

Проблема в Application Bar состоит в том, что это элемент управления Windows Phone 7, и он не поддерживает возможности Silverlight-элементов управления, например, связывание с данными. Несмотря на это, элемент управления поддерживает возможность динамического заполнения из языка программирования C#.

Так, класс ApplicationBar находится в пространстве имен Microsoft.Phone.Shell. Доступ к ApplicationBar осуществляется через соответствующее свойство класса PhoneApplicationPage.

В общем штука хорошая, поэтому пользуйтесь.

Written by Sergiy Baydachnyy

07.03.2011 at 20:41

Опубликовано в Windows Phone

Tagged with ,

Windows Phone 7: Публикация приложений

2 комментария

Поскольку украинские разработчики могут пробовать публиковать свои приложения (распространяемые бесплатно) прямо сейчас, то мне бы хотелось остановиться на вопросе публикации приложений, разобрав процесс и остановившись на основных ошибках.

Итак, первое, что необходимо сделать при публикации в Marketplace, это убедиться, что приложение обладает иконкой, отличной от той, которая используется по умолчанию. Таких иконок две: 62 на 62, используемая при отображении приложения в общем списке; 173 на 173, используемая при привязке приложения к основному окну.

Таким образом, если при тестировании Вы увидели иконку, аналогичную иконке ниже, то Ваше приложение не примут. Не совершайте этой ошибки.

clip_image001

Чтобы изменить иконку, в проекте Visual Studio достаточно заменить файлы ApplicationIcon.png и Background.png.

Если Вы добавили файлы со своими именами, то они должны находиться в корневой директории и иметь свойство Build Action установленным в Content. Далее можно отредактировать манифест приложения, используя дизайнер Visual Studio, перейдя в окно свойств проекта:

clip_image002

Имея готовый пакет для публикации, переходим к публикации приложения. Для этого нам нужны следующие компоненты:

· Сам пакет xap, содержащий приложение

· Иконки в формате png 173 на 173, 200 на 200, 99 на 99

· Минимум один скрин приложения 480 на 800

· Короткое описание приложения

Это тот минимум, который необходим для публикации приложений.

Вторая ошибка, которая возникает при публикации – неправильные скрины вашего приложения. Поскольку Вы будете снимать скрины используя эмулятор, ни в коем случае нельзя захватывать фрейм эмулятора. Нужно захватывать только окно приложения. Если Вы захватили фрейм, то приложение не примут.

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

clip_image004

Если Вы сделали это, то приложение примут.

Последняя, четвертая ошибка – приложение должно иметь окно типа About, содержащее информацию об авторе приложения, контактах для поддержки. Данное окно должно быть легко доступно. Если этого окна (даже примитивного MessageBox) нет, то приложение не примут.

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

Written by Sergiy Baydachnyy

07.03.2011 at 10:51

Опубликовано в Windows Phone

Tagged with ,