Статьи

Создание собственного диспетчера BLOB-объектов с использованием Windows 8, Visual Studio 2012 RC и Azure SDK 1.7

Программно управлять каплями
001

  1. Эта статья преследует две основные цели: (1) научить вас, что вы можете размещать веб-контент очень экономно; (2) Покажите, как вы можете создать свою собственную систему управления BLOB-объектами в облаке.
  2. Загрузите исходный код для моего проекта VS 2012 RC:
  3. Скачать исходный код https://skydrive.live.com/embed?cid=98B7747CD2E738FB&resid=98B7747CD2E738FB%212850&authkey=AAWxTD4cCiYKJ60
    Бесплатная пробная версия http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=A733F5829
  4. Хостинг веб-контента в виде большого двоичного объекта в Windows Azure является мощным средством . Начнем с того, что это чрезвычайно экономично ; это не требует от вас размещения веб-сервера самостоятельно. В результате капли очень рентабельны. Во-вторых, другой мощный аспект размещения html-содержимого в виде больших двоичных объектов в Windows Azure заключается в том, что вы получаете то, что большие двоичные объекты копируются три раза . Он всегда будет доступен с поддержкой SLA.
  5. Я использую размещенные в Windows Azure большие двоичные объекты для своего блога. Я храню HTML, Javascript и таблицы стилей. Я также управляю видеоконтентом. Вы можете увидеть мою статью в журнале MSDN для более подробной информации.

      Смотрите мою статью в MSDN Magazine, Демократизация видеоконтента с помощью Windows Azure Media Services. http://msdn.microsoft.com/en-us/magazine/jj133821.aspx
    • Я могу хранить все, что захочу. Когда вы посещаете мой блог, вы извлекаете контент из служб хранения Windows Azure.
  6. Вы можете динамически создавать контент, а затем загружать его в Azure. Я покажу вам, как загрузить веб-страницу в виде блоба.
  7. Но эта веб-страница может быть динамически создана на основе базы данных. Код, который я собираюсь показать, бесконечно гибок. Вы можете адаптировать его для программного управления всем вашим контентом .
  8. Я проиллюстрирую последние инструменты и технологии, начиная с июля 2012 года. Это означает, что мы будем использовать:

    • Windows 8
    • Visual Studio 2012 RC
    • Azure SDK и набор инструментов 1.7
    • Я предполагаю, что у вас есть учетная запись Azure (доступны бесплатные пробные версии)

2 основных типа капли

002

  1. Обслуживающие хранения предлагает два типа из блоб s, блок BLOB s и страница блоб сек .
  2. Вы указываете тип BLOB-объекта при создании BLOB-объекта .
  3. Вы можете хранить текстовые и двоичные данные в любом из « двух типов BLOB- объектов »:

    • Блок BLOB-объектов , которые оптимизированы для потоковой передачи.
    • Страничные BLOB-объекты , которые оптимизированы для случайных операций чтения / записи и которые предоставляют возможность записи в диапазон байтов в BLOB-объекте .
  4. Windows Azure Blob хранение это сервис для хранения больших объемов неструктурированных данных , которые могут быть доступны из любой точки мира через HTTP или HTTPS.
  5. Один двоичный объект может быть сотни гигабайт в размерах , и одного счета для хранения может содержать до 100 ТБ в блоб с .
  6. Общие способы использования хранилища BLOB- объектов включают в себя:

    • Обслуживание изображений или документов непосредственно в браузере
    • Хранение файлов для распределенного доступа
    • Потоковое видео и аудио
    • Выполнение безопасного резервного копирования и аварийного восстановления
    • Хранение данных для анализа локальной службой или службой Windows Azure
  7. После того , как сгусток был создан, его тип не может быть изменен , и «она может быть обновлена только с помощью операции , соответствующей для этого двоичного объекта типа», то есть, написания блок или списка блока s в блоке сгусток , и писать страницы в страничный блоб .
  8. Все BLOB s отражают зафиксированные изменения немедленно .
  9. Каждая версия сгустка имеет уникальный тег, называемый ETag, который можно использовать с условиями доступа , чтобы обеспечить вас изменить только конкретный экземпляр сгустка .
  10. Любой BLOB-объект можно арендовать для эксклюзивного доступа для записи .
  11. Когда капля в аренду, только вызовы , которые включают в себя текущий идентификатор аренды может изменить блоб или (для блочного Blob сек) его блок s.
  12. Вы можете назначить атрибуты для BLOB-объектов, а затем запросить эти атрибуты в соответствующем контейнере с помощью LINQ.
  13. BLOB-объекты позволяют записывать байты для определенных смещений. Вы можете наслаждаться типичными операциями чтения / записи, ориентированными на блок .
  14. Обратите внимание на следующие атрибуты хранилища BLOB- объектов :

    • Аккаунт хранения
      • Весь доступ к хранилищу Windows Azure осуществляется через учетную запись хранилища . Это самый высокий уровень пространства имен для доступа к BLOB-объектам . Аккаунт может содержать неограниченное количество контейнеров, если их общий размер не превышает 100 ТБ .
    • Контейнер
      • Контейнер обеспечивает группировку набора BLOB- объектов . Все BLOB-объекты должны быть в контейнере. Аккаунт может содержать неограниченное количество контейнеров. Контейнер может хранить неограниченное количество BLOB- объектов .
    • капля
      • Файл любого типа и размера.
  15. «Один блок блоб может быть до 200GB в размерах». «Страничный блоб , другой тип блоба , может иметь размер до 1 ТБ» и более эффективен, когда диапазоны байтов в файле часто изменяются. Для получения дополнительной информации о BLOB-объектах см. Основные сведения о BLOB- объектах и Page BLOB-объектах .

    • Формат URL
    • К BLOB-объектам можно обращаться, используя следующий формат URL:

      • Http: //. blob .core.windows.net /

Веб-страницы как капли

003

  1. Как я уже объяснил, я показываю, как я использую свой блог в Windows Azure [1]. Моя главная страница блога начинается с < iframe > [2] [3]. Этот тег позволяет встроить HTML-страницу в HTML-страницу . Мой пост в основном состоит из склеенных элементов iframe . Одним из таких iframe является меню для статей, которые я создал. Это действительно набор гиперссылок в стиле метро .
  2. Как я уже говорил, этот пост рассказывает о том, как я питаю свой блог [1]. Этот пост о создании веб-контента и хранении его в виде блога веб-страницы в центре обработки данных MS. Левый фрейм в моем блоге — не что иное, как фрейм с веб-страницей. [2] [3]
  3. Название веб-страницы — key_links.html. Key_links.html генерируется локально, затем загружается в хранилище блога.
  4. Панель слева, на которой написано Популярные сообщения . Это просто встроенная веб-страница, которая хранится в виде большого двоичного объекта в Windows Azure . Я загружаю блоб через приложение для Windows 8, которое собираюсь создать для вас.
  5. Реальная, которую я использую, его немного сложнее . Он использует базу данных SQL Server, которая имеет источник контента, который вы видите в популярных сообщениях .
  6. Для моего блога все, что я делаю — это постоянно обновляю базу данных. Настраиваемое приложение, которое мы пишем, создает пользовательскую веб-страницу на основе ранее введенных мной данных сервера SQL.
  7. Затем мое приложение просто перебирает строки в таблице базы данных сервера SQL и генерирует красочную сетку, которую вы видите под названием Популярные сообщения .
  8. Вы можете увидеть мой блоб, хранящийся здесь:

    • https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html

Динамически создается на основе данных SQL Server

004

  1. Вы можете перейти непосредственно к содержимому моего блоба.

    • https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
  2. Дело в том, что Key_links.html генерируется на основе записей в таблице базы данных.

    • Вы также можете хранить записи в облаке, используя базу данных SQL (ранее SQL Azure).
  3. Этот пост будет посвящен тому, как вы должны отправить key_links.html и разместить его в службе хранения Windows Azure.
  4. Здесь вы можете увидеть связь между данными таблицы и соответствующим содержимым HTML .
  5. Метроподобный веб-интерфейс, который вы видите там, динамически генерируется приложением Windows 8. Мы не будем делать динамическое создание здесь.
  6. Я использовал Visual Studio 2012 RC для написания приложения для Windows 8. Для загрузки всего необходимого мне необходим Windows Azure SDK и Tooling.

Добавление приложения WPF

005

  1. В меню Файл выберите Новый, а затем нажмите Проект .
  2. В диалоговом окне « Новый проект » выберите один из типов проектов на левой панели.
  3. Выберите Windows шаблона проекта из правой панели.
  4. На средней панели выберите Приложение WPF.
  5. Введите имя для нового проекта.
  6. Я выбрал UploadBlob

Создание приложения WPFМы можем начать перетаскивать элементы управления поверх. Мы будем перетаскивать кнопки, текстовые поля и метки. На самом деле, я предоставлю вам код XAML. В приложениях WPF пользовательский интерфейс встроен в XAML.

006

  1. Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту, чтобы вам не пришлось ничего перетаскивать.

Перетаскивание элемента управления создает XAML

007

  1. Я здесь очень подробно. Надеемся, что большинство разработчиков увидят, что при перетаскивании элемента управления генерируется код XAML. Обратите внимание, что мы перетащили в кнопку.
  2. Также обратите внимание, что код XAML ниже.
  3. Вы можете увидеть тег <Button>.
  4. Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту.

Готовое приложение, которое мы создаем Вот интерфейс, который мы хотели бы создать.

008

  1. Он имеет одну кнопку, 2 метки и 2 текстовых поля. Я дам вам код XAML через некоторое время

Наше приложение закончено и работает

009

  1. Вот как это выглядит при запуске.
  2. В верхнем текстовом поле будет отображена HTML-страница, которую мы загрузим в облако.
  3. Второе текстовое поле покажет пользователю ход выполнения загрузки.

Сборка приложения

010

  1. Давайте начнем создавать приложение. Первая задача — установить несколько ссылок.

    • Нам нужна ссылка на Windows Azure SDK.
    • Мы добавим ссылку для поддержки операторов Assert () в коде.
  2. Для пользовательского интерфейса мы добавим код XAML (я предоставлю)
  3. Логика программирования будет обрабатываться кодом ниже.
  4. Получите 90-дневную пробную версию Windows Azure.
  5. Скачать ссылку ниже:

    • http://www.windowsazure.com/en-us/pricing/free-trial/

Подключение к инструменту Azure

011

  1. Обратите внимание на две ссылки добавлены.

    • Один для инструментов качества
      • Таким образом, мы можем сделать Утверждения в коде
    • Один для клиента хранения
      • Таким образом, мы можем загружать капли
  2. Вам нужно будет выбрать кнопку обзора .

MainWindow.xaml

012

 

 

 

  1. Эта статья преследует две основные цели: (1) научить вас, что вы можете размещать веб-контент очень экономно; (2) Покажите, как вы можете создать свою собственную систему управления BLOB-объектами в облаке.
  2. Загрузите исходный код для моего проекта VS 2012 RC:
  3. Скачать исходный код https://skydrive.live.com/embed?cid=98B7747CD2E738FB&resid=98B7747CD2E738FB%212850&authkey=AAWxTD4cCiYKJ60
    Бесплатная пробная версия http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=A733F5829
  4. Хостинг веб-контента в виде большого двоичного объекта в Windows Azure является мощным средством . Начнем с того, что это чрезвычайно экономично ; это не требует от вас размещения веб-сервера самостоятельно. В результате капли очень рентабельны. Во-вторых, другой мощный аспект размещения html-содержимого в виде больших двоичных объектов в Windows Azure заключается в том, что вы получаете то, что большие двоичные объекты копируются три раза . Он всегда будет доступен с поддержкой SLA.
  5. Я использую размещенные в Windows Azure большие двоичные объекты для своего блога. Я храню HTML, Javascript и таблицы стилей. Я также управляю видеоконтентом. Вы можете увидеть мою статью в журнале MSDN для более подробной информации.

      Смотрите мою статью в MSDN Magazine, Демократизация видеоконтента с помощью Windows Azure Media Services. http://msdn.microsoft.com/en-us/magazine/jj133821.aspx
    • Я могу хранить все, что захочу. Когда вы посещаете мой блог, вы извлекаете контент из служб хранения Windows Azure.
  6. Вы можете динамически создавать контент, а затем загружать его в Azure. Я покажу вам, как загрузить веб-страницу в виде блоба.
  7. Но эта веб-страница может быть динамически создана на основе базы данных. Код, который я собираюсь показать, бесконечно гибок. Вы можете адаптировать его для программного управления всем вашим контентом .
  8. Я проиллюстрирую последние инструменты и технологии, начиная с июля 2012 года. Это означает, что мы будем использовать:

    • Windows 8
    • Visual Studio 2012 RC
    • Azure SDK и набор инструментов 1.7
    • Я предполагаю, что у вас есть учетная запись Azure (доступны бесплатные пробные версии)

2 основных типа капли

002

  1. Обслуживающие хранения предлагает два типа из блоб s, блок BLOB s и страница блоб сек .
  2. Вы указываете тип BLOB-объекта при создании BLOB-объекта .
  3. Вы можете хранить текстовые и двоичные данные в любом из « двух типов BLOB- объектов »:

    • Блок BLOB-объектов , которые оптимизированы для потоковой передачи.
    • Страничные BLOB-объекты , которые оптимизированы для случайных операций чтения / записи и которые предоставляют возможность записи в диапазон байтов в BLOB-объекте .
  4. Windows Azure Blob хранение это сервис для хранения больших объемов неструктурированных данных , которые могут быть доступны из любой точки мира через HTTP или HTTPS.
  5. Один двоичный объект может быть сотни гигабайт в размерах , и одного счета для хранения может содержать до 100 ТБ в блоб с .
  6. Общие способы использования хранилища BLOB- объектов включают в себя:

    • Обслуживание изображений или документов непосредственно в браузере
    • Хранение файлов для распределенного доступа
    • Потоковое видео и аудио
    • Выполнение безопасного резервного копирования и аварийного восстановления
    • Хранение данных для анализа локальной службой или службой Windows Azure
  7. После того , как сгусток был создан, его тип не может быть изменен , и «она может быть обновлена только с помощью операции , соответствующей для этого двоичного объекта типа», то есть, написания блок или списка блока s в блоке сгусток , и писать страницы в страничный блоб .
  8. Все BLOB s отражают зафиксированные изменения немедленно .
  9. Каждая версия сгустка имеет уникальный тег, называемый ETag, который можно использовать с условиями доступа , чтобы обеспечить вас изменить только конкретный экземпляр сгустка .
  10. Любой BLOB-объект можно арендовать для эксклюзивного доступа для записи .
  11. Когда капля в аренду, только вызовы , которые включают в себя текущий идентификатор аренды может изменить блоб или (для блочного Blob сек) его блок s.
  12. Вы можете назначить атрибуты для BLOB-объектов, а затем запросить эти атрибуты в соответствующем контейнере с помощью LINQ.
  13. BLOB-объекты позволяют записывать байты для определенных смещений. Вы можете наслаждаться типичными операциями чтения / записи, ориентированными на блок .
  14. Обратите внимание на следующие атрибуты хранилища BLOB- объектов :

    • Аккаунт хранения
      • Весь доступ к хранилищу Windows Azure осуществляется через учетную запись хранилища . Это самый высокий уровень пространства имен для доступа к BLOB-объектам . Аккаунт может содержать неограниченное количество контейнеров, если их общий размер не превышает 100 ТБ .
    • Контейнер
      • Контейнер обеспечивает группировку набора BLOB- объектов . Все BLOB-объекты должны быть в контейнере. Аккаунт может содержать неограниченное количество контейнеров. Контейнер может хранить неограниченное количество BLOB- объектов .
    • капля
      • Файл любого типа и размера.
  15. «Один блок блоб может быть до 200GB в размерах». «Страничный блоб , другой тип блоба , может иметь размер до 1 ТБ» и более эффективен, когда диапазоны байтов в файле часто изменяются. Для получения дополнительной информации о BLOB-объектах см. Основные сведения о BLOB- объектах и Page BLOB-объектах .

    • Формат URL
    • К BLOB-объектам можно обращаться, используя следующий формат URL:

      • Http: //. blob .core.windows.net /

Веб-страницы как капли

003

  1. Как я уже объяснил, я показываю, как я использую свой блог в Windows Azure [1]. Моя главная страница блога начинается с < iframe > [2] [3]. Этот тег позволяет встроить HTML-страницу в HTML-страницу . Мой пост в основном состоит из склеенных элементов iframe . Одним из таких iframe является меню для статей, которые я создал. Это действительно набор гиперссылок в стиле метро .
  2. Как я уже говорил, этот пост рассказывает о том, как я питаю свой блог [1]. Этот пост о создании веб-контента и хранении его в виде блога веб-страницы в центре обработки данных MS. Левый фрейм в моем блоге — не что иное, как фрейм с веб-страницей. [2] [3]
  3. Название веб-страницы — key_links.html. Key_links.html генерируется локально, затем загружается в хранилище блога.
  4. Панель слева, на которой написано Популярные сообщения . Это просто встроенная веб-страница, которая хранится в виде большого двоичного объекта в Windows Azure . Я загружаю блоб через приложение для Windows 8, которое собираюсь создать для вас.
  5. Реальная, которую я использую, его немного сложнее . Он использует базу данных SQL Server, которая имеет источник контента, который вы видите в популярных сообщениях .
  6. Для моего блога все, что я делаю — это постоянно обновляю базу данных. Настраиваемое приложение, которое мы пишем, создает пользовательскую веб-страницу на основе ранее введенных мной данных сервера SQL.
  7. Затем мое приложение просто перебирает строки в таблице базы данных сервера SQL и генерирует красочную сетку, которую вы видите под названием Популярные сообщения .
  8. Вы можете увидеть мой блоб, хранящийся здесь:

    • https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html

Динамически создается на основе данных SQL Server

004

  1. Вы можете перейти непосредственно к содержимому моего блоба.

    • https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
  2. Дело в том, что Key_links.html генерируется на основе записей в таблице базы данных.

    • Вы также можете хранить записи в облаке, используя базу данных SQL (ранее SQL Azure).
  3. Этот пост будет посвящен тому, как вы должны отправить key_links.html и разместить его в службе хранения Windows Azure.
  4. Здесь вы можете увидеть связь между данными таблицы и соответствующим содержимым HTML .
  5. Метроподобный веб-интерфейс, который вы видите там, динамически генерируется приложением Windows 8. Мы не будем делать динамическое создание здесь.
  6. Я использовал Visual Studio 2012 RC для написания приложения для Windows 8. Для загрузки всего необходимого мне необходим Windows Azure SDK и Tooling.

Добавление приложения WPF

005

  1. В меню Файл выберите Новый, а затем нажмите Проект .
  2. В диалоговом окне « Новый проект » выберите один из типов проектов на левой панели.
  3. Выберите Windows шаблона проекта из правой панели.
  4. На средней панели выберите Приложение WPF.
  5. Введите имя для нового проекта.
  6. Я выбрал UploadBlob

Создание приложения WPFМы можем начать перетаскивать элементы управления поверх. Мы будем перетаскивать кнопки, текстовые поля и метки. На самом деле, я предоставлю вам код XAML. В приложениях WPF пользовательский интерфейс встроен в XAML.

006

  1. Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту, чтобы вам не пришлось ничего перетаскивать.

Перетаскивание элемента управления создает XAML

007

  1. Я здесь очень подробно. Надеемся, что большинство разработчиков увидят, что при перетаскивании элемента управления генерируется код XAML. Обратите внимание, что мы перетащили в кнопку.
  2. Также обратите внимание, что код XAML ниже.
  3. Вы можете увидеть тег <Button>.
  4. Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту.

Готовое приложение, которое мы создаем Вот интерфейс, который мы хотели бы создать.

008

  1. Он имеет одну кнопку, 2 метки и 2 текстовых поля. Я дам вам код XAML через некоторое время

Наше приложение закончено и работает

009

  1. Вот как это выглядит при запуске.
  2. В верхнем текстовом поле будет отображена HTML-страница, которую мы загрузим в облако.
  3. Второе текстовое поле покажет пользователю ход выполнения загрузки.

Сборка приложения

010

  1. Давайте начнем создавать приложение. Первая задача — установить несколько ссылок.

    • Нам нужна ссылка на Windows Azure SDK.
    • Мы добавим ссылку для поддержки операторов Assert () в коде.
  2. Для пользовательского интерфейса мы добавим код XAML (я предоставлю)
  3. Логика программирования будет обрабатываться кодом ниже.
  4. Получите 90-дневную пробную версию Windows Azure.
  5. Скачать ссылку ниже:

    • http://www.windowsazure.com/en-us/pricing/free-trial/

Подключение к инструменту Azure

011

  1. Обратите внимание на две ссылки добавлены.

    • Один для инструментов качества
      • Таким образом, мы можем сделать Утверждения в коде
    • Один для клиента хранения
      • Таким образом, мы можем загружать капли
  2. Вам нужно будет выбрать кнопку обзора .

 


MainWindow.xaml

012

 

<Window
 x:Class="UploadBlob.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="MainWindow"
 Height="350"
 Width="525">
    <Grid>
     <Button
     Name="buttonUploadBlob"
     Click="buttonUploadBlob_Click"
     Content="Upload Blob (Web Page)"
     HorizontalAlignment="Left"
     Margin="37,31,0,0"
     VerticalAlignment="Top"
     Width="160"
     Height="46"/>
     <TextBox
     Name="txtCodeToUpload"
     TextWrapping="Wrap"
     AcceptsReturn="True"
     VerticalScrollBarVisibility="Visible"
     Margin="37,117,28.4,0"
     VerticalAlignment="Top"
     Height="69" >Filled at run time with text to upload</TextBox>
     <TextBox
     Name="txtWorkDone"
     TextWrapping="Wrap"
     AcceptsReturn="True"
     VerticalScrollBarVisibility="Visible"
     Margin="37,215,28.4,0"
     VerticalAlignment="Top"
     Height="69"
     Text="Filled at run time with how much progress has been made"/>
     <Label
     Content="Text to be upload to cloud"
     HorizontalAlignment="Left"
     Margin="37,91,0,0"
     VerticalAlignment="Top"/>
     <Label
     Content="Files successfully uploaded to cloud"
     HorizontalAlignment="Left"
     Margin="37,191,0,0"
     VerticalAlignment="Top"/>
    </Grid>
</Window>

Время написания кода на C #
013

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

MainWindow.xaml.cs

014

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
 
using System.Windows.Threading;
 
namespace UploadBlob
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
 
        }
        public void UpdateGui(string msg, string content)
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Input, (ThreadStart)(
                        () =>
                        {
                            this.txtWorkDone.Text += Environment.NewLine + string.Format(
                                     "We are uploading {0}", msg);
                            this.txtCodeToUpload.Text += Environment.NewLine + string.Format(
                                     "We are uploading {0}", content);
                        }));
 
        }
        private string GetStringFromFileName(string path)
        {
            FileIOReader file_io = new FileIOReader(path);
            string s = file_io.ReadFile();
            file_io.Close();
            return s;
        }
        private void buttonUploadBlob_Click(object sender, RoutedEventArgs e)
        {
            // Get file path to BrunoPage.html. It is in the "content" folder.
            string curr_file = System.IO.Path.Combine(Environment.CurrentDirectory,
                                     @"..\..\Content\" + "BrunoPage.html");
            // Open file and load content for uploading to Azure
            string html_content_to_upload = GetStringFromFileName(curr_file);
            // Kick off thread to do the uploading. Use Task-based threading.
            // Get help from BlobManager code.
            Task<string> taskOpenEndpoint = Task<string>.Factory.StartNew(() =>
            {
                // Use blob manager for encapsulation
                BlobManager bu = new BlobManager();
                // Upload the web page. (1) Pass in the callback method to update the gui.
                // In other words, BlobManager can update the gui.
                // (2) Pass in the string containing the web content I want to host in the cloud.
                // (3) Pass in the destination web page
                bu.UploadWebPage(this.UpdateGui,
                                    html_content_to_upload,
                                    "BrunoPageDestination.html");
 
 
                return "";
 
            });
            UpdateGui(curr_file, "We are done");
        }
 
    }
}

Добавление двух вспомогательных классов
+015

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

    • FileIOReader
    • BlobManager
  4. Просто наведите курсор на имя класса, щелкните правой кнопкой мыши и выберите « Создать класс».

FileIOReader.cs

016

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace UploadBlob
{
    public class FileIOReader
    {
        FileStream fs_reader = null;
        StreamReader stream_reader = null;
 
        public FileIOReader(string path)
        {
            fs_reader = File.Open(path, FileMode.Open);
            stream_reader = new StreamReader(fs_reader);
 
        }
        public bool HasData()
        {
            return (stream_reader.EndOfStream == false);
        }
        public string ReadFile()
        {
            return stream_reader.ReadToEnd().ToString();
        }
        public void ReadLine(ref string s)
        {
            s = stream_reader.ReadLine();
        }
        public void Close()
        {
            stream_reader.Close();
            fs_reader.Close();
        }
    }
    public class FileIOWriter
    {
        FileStream fs_writer = null;
        StreamWriter stream_writer = null;
        public FileIOWriter(string path)
        {
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            fs_writer = File.Create(path);
            stream_writer = new StreamWriter(fs_writer);
 
        }
        public void WriteLine(string s)
        {
            stream_writer.WriteLine(s);
        }
        public void Close()
        {
            stream_writer.Close();
            fs_writer.Close();
        }
 
    }
 
}

BlobManager.cs

+017

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
 
namespace UploadBlob
{
    class BlobManager
    {
        public void UploadWebPage(Action<string, string> UpdateGui,
                                  string codeToUpload,
                                  string output_filename)
        {
            // Notify user of upload process.
            UpdateGui("Starting to process " + output_filename, codeToUpload);
             
            // Our blob client object to do the actual upload.
            // This is part of the Azure SDK
            CloudBlobClient blobStorage = null;
 
            // Required function for managing cloud connection strings
            Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
            {
                configSetter(configName);
            });
 
            // Read account configuration settings
            // We will retrieve (1) account name (2) account secret key
            string connectionString = null;
            string formatter_for_connection = Properties.Settings.Default.DataConnectionstringProduction;
            string accountName = Properties.Settings.Default.accountname;
            string accountKey = Properties.Settings.Default.accountkey;
            // Build up a connection string
            connectionString = string.Format(formatter_for_connection, accountName, accountKey);
 
            // Show the user the connection string.
            UpdateGui(output_filename, "Connection string is " + connectionString);
            // The storage account IS the connection string value
            var storageAccount =
                CloudStorageAccount.FromConfigurationSetting(connectionString);
            // Define a container for the web page.
            string blobContainerName = "blobcalendarcontent";
            // Load an object to do the uploading work.
            blobStorage = storageAccount.CreateCloudBlobClient();
            // Verify the container is built.
            CloudBlobContainer container = blobStorage.GetContainerReference(blobContainerName);
            container.CreateIfNotExist();
 
            // Some basic error checking and diagnostics.
            Assert.AreEqual<string>(
                string.Format(@"https://brunoblogcontent.blob.core.windows.net/{0}",
                                      blobContainerName), container.Uri.ToString());
            Assert.AreEqual<string>(blobContainerName, container.Name.ToString());
 
            // Make sure to configure container for public access
            var permissions = container.GetPermissions();
            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            // Verify not public alraady
            Assert.AreNotEqual(permissions.PublicAccess, null);
            // Now make public.
            container.SetPermissions(permissions);
 
            // Build up the blob name
            string uniqueBlobName = string.Format("{0}/{1}", blobContainerName,
                                output_filename);
            CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName);
            // Set content type to reflect web page. Different for video, css, etc.
            blob.Properties.ContentType = "text/html";
            // Tell user upload is happening.
            UpdateGui("uniqueBlobName is " + uniqueBlobName, codeToUpload);
            UpdateGui("uri is " + blob.Uri.AbsoluteUri.ToString(), codeToUpload);
            // Finally, the actual upload.
            blob.UploadText(codeToUpload);
            // Output to diagnostics window.
            System.Diagnostics.Trace.TraceInformation("Uploaded image '{0}'",
                                                                uniqueBlobName);
        }
 
    }
}

У вас должна быть учетная запись на портале Windows Azure
018

  1. Вы получаете эту информацию с портала Windows Azure
  2. Портал, где вы получаете имя учетной записи и ключ учетной записи
  3. Вам нужно будет нажать на кнопку « Просмотр» .
  4. Сохраните эту информацию, чтобы вы могли вставить ее в приложение.
  5. Вы можете думать об этой информации как имя пользователя и пароль.

Портал

019

  1. Портал, где вы получаете имя учетной записи и ключ учетной записи
  2. Вам нужно будет нажать на кнопку « Просмотр» .
  3. Сохраните эту информацию, чтобы вы могли вставить ее в приложение.
  4. Вы можете думать об этой информации как имя пользователя и пароль.

Settings.settings

020

<?xml version='1.0' encoding='utf-8' >
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings >
 
    <Setting Name="accountname" Type="System.String" Scope="User">
      <Value Profile="(Default)">brunoblogcontent</Value>
    </Setting>
    <Setting Name="accountkey" Type="System.String" Scope="User">
      <Value Profile="(Default)">oOTLSWgSvFFIECZU21VdUc/FtSv4oksXv5J4F/VEuWfhiWFvSb0u0xMDSvhblkxci+VZduxzZBXZMolAb9gUkw==</Value>
    </Setting>
    <Setting Name="DataConnectionstringProduction" Type="System.String" Scope="User">
      <Value Profile="(Default)">DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}</Value>
    </Setting>
  </Settings>
</SettingsFile>

Определение блоба, который вы будете загружать

021

  1. Теперь нам нужно определить, какой контент, который мы хотим загрузить, имеет большой двоичный объект в службе хранения Windows Azure. В нашем случае мы просто загрузим веб-страницу. Также можно загружать практически все, что угодно, например, zip-файлы, MP3-файлы, видео, практически все, что только можно придумать.
  2. Вы можете щелкнуть правой кнопкой мыши на проекте, что позволит вам добавить новую папку. Оттуда вы можете добавить новый элемент , который в нашем случае будет веб-страницей, в основном HTML-файлом .
  3. Щелкните правой кнопкой мыши проект и выберите « Добавить» , « Новая папка».
  4. Позвоните в папку Content
  5. Щелкните правой кнопкой мыши новую папку ( Содержимое ) и выберите Добавить новый элемент.
  6. Веб-страница будет называться BrunoPage.html.
    • Вы можете называть это как хотите, но вам нужно запомнить это для кода. Это очевидно должно соответствовать.

BrunoPage.html

022

<!DOCTYPE html>
 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <strong>Store this as a blob
        in a Microsoft data center.
    </strong>
</body>
</html>

BLOB-объект и запущенное приложение

023

  1. Запуск приложения и загрузка веб-страницы (блоб)
  2. BrunoPage.html можно увидеть выше. Обратите внимание на тег <body>, который мы добавили.
  3. Щелкните правой кнопкой мыши BrunoPage.html и выберите открыть
  4. Введите код, который вы видите выше. Я назвал новый файл BrunoPageDestination.html
  5. http://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/BrunoPageDestination.html

Использование Azure Storage Explorer

024

  1. Вы можете скачать Azure Storage Explorer здесь:

    • http://azurestorageexplorer.codeplex.com/
  2. Azure Storage Explorer поможет вам просмотреть загруженный BLOB-объект.

    • Он также работает с таблицами и очередями (2 других типа хранилища, связанных с Azure)
  3. После того, как вы ввели данные своей учетной записи, вы можете просто нажать на капли.
  4. После установки вам нужно будет настроить свою учетную запись.

    • Это тот же процесс, что и раньше.

      • Вам нужно будет зайти на портал и получить имя учетной записи и ключ учетной записи.

Взаимодействие с Azure Storage Explorer

025

  1. Обратите внимание, что контейнер был назван blobcalendarcontent
    • Это было определено нашим кодом (MainWindow.xaml.cs)

Бурение в нашем блобе (веб-страница)

026

  1. Azure Storage Explorer может помочь вам получить абсолютный URI вашего содержимого BLOB-объекта.
  2. Вы также можете заметить, что ContentType является text / html

Просмотр веб-страницы, которую мы загрузили

027

  1. Вы могли бы пойти туда прямо сейчас.

    • http://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/BrunoPageDestination.html

Вывод

028

  1. Это был амбициозный пост. Это покрыло много интересного.
  2. Я позволю вам создавать динамически генерируемый контент.
  3. Следовать за

    • Понимание блочных и блобных страниц

      • http://msdn.microsoft.com/en-us/library/windowsazure/ee691964.aspx
    • Visual Studio 2012 RC загрузки

      • http://www.microsoft.com/visualstudio/11/en-us/downloads#
    • Загрузить: Windows Azure SDK для .NET

      • http://www.windowsazure.com/en-us/pricing/free-trial/