Microsoft Azure
Облачный бизнес
Вам понадобится

Microsoft Azure

Попробуйте платформу Microsoft Azure совершенно бесплатно.

Visual Studio

Бесплатная версия Visual Studio, позволяющая создавать приложения для платформы Microsoft Azure.

SDKs и дополнительные
инструменты

Инструменты разработки приложений для платформы Microsoft Azure.

 

Создание сайта Windows Azure Web Sites с подключением к MongoDB в виртуальной машине c помощью Git

В этом руководстве рассказывается об использовании  MongoDB для хранения данных и доступа к ним из приложения  node, размещенного на платформе Windows Azure. MongoDB — это популярная высокопроизводительная база данных NoSQL с открытым исходным кодом. Предполагается, что вы имеете знания и опыт работы с приложением node, MongoDB и системой  Git.

О чем пойдет речь в данном руководстве:

  • Как настроить виртуальную машину, работающую под управлением Linux или Windows, и установить MongoDB.
  • Как установить модуль с помощью диспетчера пакетов (npm).
  • Как получить доступ к MongoDB из приложения node.
  • Как использовать межплатформенные средства Windows Azure для создания веб-сайта Windows Azure.

Следуя инструкциям этого руководства, вы разработаете веб-приложение по управлению задачами, позволяющее создавать, извлекать и выполнять задачи. Задачи будут сохраняться в MongoDB.

Файлы данного проекта хранятся в каталоге tasklist, а готовое приложение выглядит следующим образом.

image

Примечание. Это руководство ссылается на папку tasklist. Полный путь к папке опущен из-за различий семантик путей в операционных системах. Эту папку следует создать в расположении, к которому легко обращаться из локальной файловой системы, например ~/node/tasklist или c:\node\tasklist

Примечание. Большинство действий выполняются с помощью командной строки. Используйте командную строку операционной системы вашего ПК, например Windows PowerShell (Windows) или Bash (Unix Shell). В ОС X доступ к командной строке осуществляется с помощью приложения Terminal.

Необходимые компоненты

Перед выполнением инструкций убедитесь, что установлены следующие компоненты:

  • node — последняя версия;
  • Git.

Подготовка

В этом разделе рассказывается о создании виртуальной машины на платформе Windows Azure, установке MongoDB, настройке среды разработки и установке драйвера на C# для MongoDB.

Создание виртуальной машины и установка MongoDB

Предполагается, что вы уже создали виртуальную машину на платформе Windows Azure. Теперь на нее нужно установить MongoDB.

После создания виртуальной машины на платформе Windows Azure и установки MongoDB необходимо запомнить DNS-имя виртуальной машины (например, testlinuxvm.cloudapp.net) и внешний порт MongoDB, указанный в конечной точке. Эта информация потребуется нам позднее.

Регистрация для использования функции предварительного просмотра веб-сайтов Windows Azure

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

Откройте веб-браузер и перейдите на веб-сайт  http://www.windowsazure.com.

Чтобы приступить к работе с помощью бесплатной учетной записи, щелкните в верхнем правом углу Free Trial и выполните указанные действия. Для проверки личности может потребоваться указать номер кредитной карты или мобильного телефона. Счет при этом не выставляется.

clip_image004

Включение веб-сайта Windows Azure

Перейдите на страницу  https://account.windowsazure.com/ и выполните вход с помощью учетной записи Windows Azure.

Щелкните элемент preview features, чтобы увидеть доступные варианты предварительного просмотра.

clip_image006

3. Выполните прокрутку до пункта Web Sites и нажмите кнопку try it now.

clip_image008

4. Выберите подписку и установите флажок.

clip_image010

Установка модулей и скаффолдинг

В этом разделе вы создадите приложение Node и с помощью npm добавите пакеты модулей. Для создания приложения потребуются модули  Express и  Mongoose. Модуль Express предоставляет платформу Model View Controller для узла, а модуль Mongoose является инструментом взаимодействия с MongoDB.

Установка модулей и скаффолдинг

В командной строке перейдите в каталог tasklist. Если каталог tasklist не существует, создайте его.

Чтобы установить модуль express, введите следующую команду:

sudo npm install express -g

Примечание. При использовании параметра -g в некоторых операционных системах может появиться сообщение об ошибке «Ошибка: EPERM, chmod '/usr/local/bin/express'» и запрос на запуск от имени администратора. В этом случае воспользуйтесь командой sudo для запуска npm с привилегиями более высокого уровня.

Результат работы команды будет выглядеть примерно так, как показано ниже: 
image

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

Чтобы создать скаффолдер, который будет применяться для этого приложения, используйте команду express.

express

Результат работы команды будет выглядеть примерно так, как показано ниже:

image

После выполнения команды в каталоге tasklist появятся несколько новых каталогов и файлов.

Установка дополнительных модулей

package.json –– это один из файлов, созданных в результате выполнения командыexpress. Он содержит список дополнительных модулей, необходимых для приложения Express. Позднее, при развертывании приложения на новом сайте Windows Azure, этот файл будет использоваться для определения модулей, устанавливаемых на платформе Windows Azure с целью поддержки приложения.

В командной строке перейдите в каталог tasklist и введите следующую команду, чтобы установить модули, описанные в файле package.json:

npm install

Результат работы команды будет выглядеть примерно так, как показано ниже:

image

По умолчанию будут установлены все модули, необходимые приложению Express.

Затем введите следующую команду для локальной установки модуля Mongoose, а также для сохранения записи о нем в файле package.json:

npm install mongoose --save

Результат работы команды будет выглядеть примерно так, как показано ниже:

image

Примечание. Сообщения об установке инструмента синтаксического анализа C++ bson можно пропустить.

Использование MongoDB в приложении node

В этом разделе вы дополните базовое приложение, созданное с помощью командыexpress, файлом task.js, содержащим модель для ваших задач. Вы также измените файл контроллера app.js и создадите файл контроллера tasklist.js для использования модели.

Создание модели

В каталоге tasklist создайте каталог с именем models. В каталоге models создайте файл с именем task.js. Этот файл будет содержать модель для задач, созданных приложением.

С помощью Git можно развернуть приложение ASP.NET на веб-сайте Windows Azure. В этом руководстве рассказывается, как создать простое интерфейсное приложение для списка задач ASP.NET MVC, которое подключается к базе данных MongoDB, исполняемой на виртуальной машине на платформе Windows Azure.  MongoDB — это популярная высокопроизводительная база данных NoSQL с открытым исходным кодом. После запуска и тестирования приложения ASP.NET на компьютере разработчика вы загрузите приложение на веб-сайт Windows Azure с помощью Git.

Создаваемое приложение ASP.NET будет выглядеть следующим образом.

clip_image002[4]

Общие сведения

О чем пойдет речь в данном руководстве:

Базовые знания

При изучении данного материала необходимо (но не обязательно) разбираться в следующих областях.

  • Драйвер на C# для MongoDB. Дополнительные сведения о разработке приложений на C# для MongoDB приведены на веб-сайте  CSharp Language Center.
  • Платформа веб-приложений ASP .NET. Более подробные сведения можно найти на веб-сайте ASP.net.
  • Платформа веб-приложений ASP .NET MVC 3.0. Более подробные сведения можно найти на  веб-сайте ASP.NET MVC 3.
  • Windows Azure. Начать знакомство с платформой можно на веб-сайте  Windows Azure.

Подготовка

В этом разделе рассказывается о создании виртуальной машины на платформе Windows Azure, установке MongoDB и настройке среды разработки.

Создание виртуальной машины и установка MongoDB

Предполагается, что вы уже создали виртуальную машину на платформе Windows Azure. Теперь на нее нужно установить MongoDB.

После создания виртуальной машины на платформе Windows Azure и установки MongoDB необходимо запомнить DNS-имя виртуальной машины (например, testlinuxvm.cloudapp.net) и внешний порт MongoDB, указанный в конечной точке. Эта информация потребуется нам позднее.

Регистрация для использования функции предварительного просмотра Windows Azure Web Sites

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

Откройте веб-браузер и перейдите на веб-сайт  http://www.windowsazure.com.

Чтобы приступить к работе с помощью бесплатной учетной записи, щелкните в верхнем правой углу Free Trial и выполните указанные действия. Для проверки личности может потребоваться указать номер кредитной карты или мобильного телефона. Счет при этом не выставляется.

clip_image004[4]

Включение веб-сайта Windows Azure

Перейдите на страницу  https://account.windowsazure.com/ и выполните вход с помощью учетной записи Windows Azure. Щелкните элемент preview features, чтобы увидеть доступные варианты предварительного просмотра.

clip_image006[4]

3. Выполните прокрутку до пункта Web Sites и нажмите кнопку try it now.

clip_image008[4]

4. Выберите подписку и установите флажок.

clip_image010[4]

Настройка среды разработки

В этом руководстве мы используем Microsoft Visual Studio 2010, однако можно работать также с Microsoft Visual Web Developer 2010 Express с пакетом обновления SP1 (это бесплатная версия Microsoft Visual Studio). Сначала убедитесь, что на локальном компьютере разработчика установлены необходимые компоненты, указанные ниже. Чтобы установить все компоненты сразу, щелкните ссылку  Web Platform Installer. Кроме того, компоненты можно установить по отдельности, выполнив переход по ссылкам:

Если вместо Visual Studio 2010 вы используете Visual Web Developer 2010, установите необходимые компоненты, щелкнув следующую ссылку:  Необходимые компоненты для Visual Studio Web Developer Express SP1

Создание и запуск приложения My Task List ASP.NET на компьютере разработчика

В этом разделе вы создадите приложение My Task List ASP.NET с помощью Visual Studio. Кроме того, вы запустите приложение локально в экземпляре MongoDB, который создан на виртуальной машине, размещенной на платформе Windows Azure.

Создание приложения

Запустите Visual Studio и на странице Start выберите New Project.

В левой части выберите элементы Visual C# и Web , а затем в списке шаблонов ––ASP.NET MVC 3 Web Application. Присвойте проекту имя MyTaskListApp и нажмите кнопку OK.

clip_image012

В диалоговом окне New ASP.NET MVC 3 Project выберите Internet Application. Установите флажок Use HTML5 markup и оставьте Razor в качестве системы просмотра по умолчанию.

Нажмите кнопку OK.

clip_image014

Установка драйвера на C# для MongoDB

MongoDB обеспечивает клиентскую поддержку приложений на C# при помощи драйвера, который нужно установить на локальном компьютере разработчика. Драйвер на C# можно получить с помощью средства NuGet.

Чтобы установить драйвер на C# для MongoDB, выполните следующие действия.

В Solution Explorer щелкните правой кнопкой мыши ссылки на проект MyTaskListApplication и выберите команду Add Library Package Reference...

clip_image016

В окне Add Library Package Reference щелкните элемент Online и найдите драйвер mongocsharpdriver. Нажмите кнопку Install, чтобы установить драйвер.

clip_image018

Щелкните I Accept, чтобы принять условия лицензионного соглашения 10gen, Inc.. После установки драйвера нажмите кнопку Close.

clip_image020

Драйвер на C# для MongoDB установлен. К проекту добавлены ссылки на библиотеки MongoDB.Driver.dll и MongoDB.Bson.dll.

clip_image022

Добавление модели

В Solution Explorer щелкните правой кнопкой мыши папку Models, затем Add и новый Class TaskModel.cs. В файле TaskModel.cs замените существующий код следующим:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using MongoDB.Bson.Serialization.Attributes; 
using MongoDB.Bson.Serialization.IdGenerators; 
using MongoDB.Bson; 

namespace MyTaskListApp.Models 
{ 
    public class Task 
    { 
        [BsonId(IdGenerator = typeof(CombGuidGenerator))] 
        public Guid Id { get; set; } 

        [BsonElement("Name")] 
        public string Name { get; set; } 

        [BsonElement("Category")] 
        public string Category { get; set; } 

        [BsonElement("Date")] 
        public DateTime Date { get; set; } 

        [BsonElement("CreatedDate")] 
        public DateTime CreatedDate { get; set; } 

    } 
}

Добавление уровня доступа к данным

В Solution Explorer щелкните правой кнопкой мыши проект MyTaskListApp и выберите команду Add для добавления новой папки с именем DAL. Правой кнопкой мыши щелкните папку DAL и выберите команду Add, чтобы добавить новый файл класса с именем Dal.cs. В файле Dal.cs замените существующий код следующим:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using MyTaskListApp.Models; 
using MongoDB.Driver; 
using System.Configuration; 

namespace MyTaskListApp 
{ 
    public class Dal : IDisposable 
    { 
        private MongoServer mongoServer = null; 
        private bool disposed = false; 

        // To do: update the connection string with the DNS name 
        // or IP address of your server. 
        //For example, "mongodb://testlinux.cloudapp.net" 
        private string connectionString = "mongodb://<vm-dns-name>"; 

        // This sample uses a database named "Tasks" and a 
        //collection named "TasksList".  The database and collection 
        //will be automatically created if they don't already exist. 
        private string dbName = "Tasks"; 
        private string collectionName = "TasksList"; 

        // Default constructor.        
        public Dal() 
        { 
        }         

        // Gets all Task items from the MongoDB server.        
        public List<Task> GetAllTasks() 
        { 
            try 
            { 
                MongoCollection<Task> collection = GetTasksCollection(); 
                return collection.FindAll().ToList<Task>(); 
            } 
            catch (MongoConnectionException) 
            { 
                return new List<Task>(); 
            } 
        } 

        // Creates a Task and inserts it into the collection in MongoDB. 
        public void CreateTask(Task task) 
        { 
            MongoCollection<Task> collection = GetTasksCollectionForEdit(); 
            try 
            { 
                collection.Insert(task, SafeMode.True); 
            } 
            catch (MongoCommandException ex) 
            { 
                string msg = ex.Message; 
            } 
        } 

        private MongoCollection<Task> GetTasksCollection() 
        { 
            MongoServer server = MongoServer.Create(connectionString); 
            MongoDatabase database = server[dbName]; 
            MongoCollection<Task> todoTaskCollection = database.GetCollection<Task>(collectionName); 
            return todoTaskCollection; 
        } 

        private MongoCollection<Task> GetTasksCollectionForEdit() 
        { 
            MongoServer server = MongoServer.Create(connectionString); 
            MongoDatabase database = server[dbName]; 
            MongoCollection<Task> todoTaskCollection = database.GetCollection<Task>(collectionName); 
            return todoTaskCollection; 
        } 

        # region IDisposable 

        public void Dispose() 
        { 
            this.Dispose(true); 
            GC.SuppressFinalize(this); 
        } 

        protected virtual void Dispose(bool disposing) 
        { 
            if (!this.disposed) 
            { 
                if (disposing) 
                { 
                    if (mongoServer != null) 
                    { 
                        this.mongoServer.Disconnect(); 
                    } 
                } 
            } 

            this.disposed = true; 
        } 

        # endregion 
    } 
}

Добавление контроллера

Откройте файл Controllers\HomeController.cs в Solution Explorer и замените существующий код следующим:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MyTaskListApp.Models; 
using System.Configuration; 

namespace MyTaskListApp.Controllers 
{ 
    public class HomeController : Controller, IDisposable 
    { 
        private Dal dal = new Dal(); 
        private bool disposed = false; 
        // 
        // GET: /Task/ 

        public ActionResult Index() 
        { 
            return View(dal.GetAllTasks()); 
        } 

        // 
        // GET: /Task/Create 

        public ActionResult Create() 
        { 
            return View(); 
        } 

        // 
        // POST: /Task/Create 

        [HttpPost] 
        public ActionResult Create(Task task) 
        { 
            try 
            { 
                dal.CreateTask(task); 
                return RedirectToAction("Index"); 
            } 
            catch 
            { 
                return View(); 
            } 
        } 

        public ActionResult About() 
        { 
            return View(); 
        } 

        # region IDisposable 

        new protected void Dispose() 
        { 
            this.Dispose(true); 
            GC.SuppressFinalize(this); 
        } 

        new protected virtual void Dispose(bool disposing) 
        { 
            if (!this.disposed) 
            { 
                if (disposing) 
                { 
                    this.dal.Dispose(); 
                } 
            } 

            this.disposed = true; 
        } 

        # endregion 

    } 
}

Настройка стиля сайта

Чтобы изменить заголовок в верхней части страницы, откройте файлViews\Shared\_Layout.cshtml в Solution Explorer и замените существующий текст заголовка h1 следующим:

<h1>My Task List Application</h1>

Чтобы настроить меню Task List, откройте файл \Views\Home\Index.cshtml и замените существующий код следующим:

@model IEnumerable<MyTaskListApp.Models.Task> 

@{ 
    ViewBag.Title = "My Task List"; 
} 

<h2>My Task List</h2> 

<table border="1"> 
    <tr> 
        <th>Task</th> 
        <th>Category</th> 
        <th>Date</th> 

    </tr> 

@foreach (var item in Model) { 
    <tr> 
        <td> 
            @Html.DisplayFor(modelItem => item.Name) 
        </td> 
        <td> 
            @Html.DisplayFor(modelItem => item.Category) 
        </td> 
        <td> 
            @Html.DisplayFor(modelItem => item.Date) 
        </td> 

    </tr> 
} 

</table> 
<div>  @Html.Partial("Create", new MyTaskListApp.Models.Task())</div> 
To add the ability to create a new task, right-click the Views\Home\ folder and Add a View. Name the view Create. Replace the code with the following: 
@model MyTaskListApp.Models.Task 

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm("Create", "Home")) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
        <legend>New Task</legend> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Name) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Name) 
            @Html.ValidationMessageFor(model => model.Name) 
        </div> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Category) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Category) 
            @Html.ValidationMessageFor(model => model.Category) 
        </div> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Date) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Date) 
            @Html.ValidationMessageFor(model => model.Date) 
        </div> 

        <p> 
            <input type="submit" value="Create" /> 
        </p> 
    </fieldset> 
}

Чтобы добавить возможность создания задачи, щелкните правой кнопкой мыши папкуViews\Home\ и выберите команды Add и View. Присвойте представлению имя Create. Замените код следующим:

@model MyTaskListApp.Models.Task 

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm("Create", "Home")) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
        <legend>New Task</legend> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Name) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Name) 
            @Html.ValidationMessageFor(model => model.Name) 
        </div> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Category) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Category) 
            @Html.ValidationMessageFor(model => model.Category) 
        </div> 

        <div class="editor-label"> 
            @Html.LabelFor(model => model.Date) 
        </div> 
        <div class="editor-field"> 
            @Html.EditorFor(model => model.Date) 
            @Html.ValidationMessageFor(model => model.Date) 
        </div> 

        <p> 
            <input type="submit" value="Create" /> 
        </p> 
    </fieldset> 
}

Solution Explorer должен выглядеть следующим образом:

clip_image024

Установка строки подключения к MongoDB

В Solution Explorer откройте файл DAL/Dal.cs. Найдите следующую строку кода:

private string connectionString = "mongodb://<vm-dns-name>";

Замените DNS-имя виртуальной машины, на которой запущена база данных MongoDB и которая была создана в разделе  "Создание виртуальной машины и установка MongoDB"этого руководства. Чтобы узнать DNS-имя виртуальной машины, перейдите на портал управления Windows Azure, выберите Virtual Machines и найдите DNS Name.

Если виртуальная машина имеет DNS-имя testlinuxvm.cloudapp.net и MongoDB по умолчанию выполняет прослушивание порта 27017, то код строки подключения будет выглядеть следующим образом:

private string connectionString = "mongodb://testlinuxvm.cloudapp.net";

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

private string connectionString = "mongodb://testlinuxvm.cloudapp.net:12345";

Дополнительные сведения о строках подключения к MongoDB приведены в разделе "Подключения".

Тестирование локального развертывания

Чтобы запустить приложение на компьютере разработчика, в меню Debug выберите пункт Start Debugging или нажмите клавишу F5. Запустится веб-сервер разработки и откроется веб-браузер с домашней страницей приложения. Можно добавить новую задачу, которая будет добавлена также в базу данных MongoDB на виртуальной машине, развернутой на платформе Windows Azure.

clip_image026

Развертывание приложения ASP.NET на веб-сайте Windows Azure

В этом разделе вы создадите веб-сайт и развернете приложение My Task List ASP.NET с помощью Git.

Создание веб-сайта Windows Azure

В этом разделе вы создадите веб-сайт Windows Azure.

Откройте веб-браузер и перейдите к  порталу управления Windows Azure (версия Preview). Войдите на портал с помощью учетной записи Windows Azure.

В нижней части страницы щелкните +New, затем — Web Site, а затем — Quick Create. Введите уникальный префикс для URL-адреса приложения. Выберите регион.

Щелкните Create Web Site.

clip_image028

Будет создан веб-сайт, он появится в списке Web sites.

clip_image030

Развертывание приложения ASP.NET на веб-сайте с помощью Git

В этом разделе вы развернете приложение My Task List с помощью Git.

В списке Web sites выберите имя веб-сайта, а затем щелкните Dashboard. Щелкните Set up Git publishing в нижней части страницы Dashboard для сайта mytasklistapp.

На странице New user name and password введите имя пользователя и пароль и поставьте флажок. Обратите внимание на инструкции на итоговой странице, поскольку они будут использоваться в следующем разделе.

Будет быстро создан репозиторий Git.

clip_image032

Выберите Push my local files to Windows Azure, чтобы отобразить инструкции по отправке кода на платформу Windows Azure. Инструкции выглядят приблизительно следующим образом.

clip_image034

Если система Git не установлена, сделайте это, воспользовавшись ссылкой Get it here на шаге 1.

После выполнения инструкций на шаге 2 зафиксируйте локальные файлы.

Добавьте удаленный репозиторий Windows Azure и отправьте файлы на веб-сайт Windows Azure согласно инструкциям на шаге 3.

После окончания развертывания появится следующее подтверждение:

clip_image036

Теперь к веб-сайту Windows Azure можно получить доступ. На странице Dashboardпроверьте сайт и поле Site URL, чтобы найти URL-адрес своего сайта. После выполнения процедур данного руководства ваш сайт будет доступен по адресу:http://mytasklistapp.azurewebsites.net.

Сводные данные

Вы успешно развернули приложение ASP.NET на веб-сайте Windows Azure. Чтобы просмотреть сайт, щелкните ссылку в поле Site URL на странице Dashboard. Дополнительные сведения о разработке приложений на C# для MongoDB приведены на веб-сайте  CSharp Language Center.

Автор статьи: Владимир Юнев.