Доступ к данным: использование Windows Azure AppFabric Service Bus и WCF Data Service

Доступ к данным: использование Windows Azure AppFabric Service Bus и WCF Data Service

На конференции MS SWIT в рамках своего доклада Обзор Windows Azure AppFabric (посмотреть в записи http://www. techdays. in. ua/videos/3187.html)я демонстрировал типичный сценарий миграции части решения в облако, либо на сервера провайдера, при этом сами данные никуда не переносились. Этой статьей я хочу начать цикл публикаций, в котором я детально рассмотрю сценарий доступа к данным с использованием WCF Data Service, Windows Server AppFabric и Windows Azure AppFabric Service Bus.

Почему именно этот сценарий? Давайте посмотрим как обычно разрабатываются бизнес-приложения в наших компаниях. Компания, либо сотрудник, принимают решение создать приложение, зачастую собственными силами, для решения самой необходимой, либо трудоемкой задачи. А так как большинство таких компаний заняты продажей чего-либо, то эти задачи непосредственно связаны с обслуживанием ассортимента товаров: каталог товаров, наличие товара, резервирование товара, взаимозаменяемость. Обычно для разработки выбирается что-то простое и знакомое. Часто используется Microsoft Access, Delphi + Interbase, либо что-то подобное, с помощью чего можно визуально спроектировать базу и пользовательский интерфейс и одной кнопкой собрать настольное приложение. Резонный вопрос: «А почему бы не купить готовое решение?». Неоднократно его задавал, и вот что слышал в ответ:

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

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

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

И вот в этот момент бизнес принимает решение о необходимости реализации возможность для внешних участников работать с системой напрямую. И первое что приходит в голову – создать веб-сайт, через который они смогут работать с данными. Собственных серверов у компании нет, каналы связи тоже не обладают достаточной пропускной способностью. Поэтому, оптимальным решением будет создание сайта, который будет размещен на ресурсах провайдера или в облаке, при этом хранилище данных должно остаться на ресурсах компании, в защищённом сетевом периметре, с возможность работать с данными непосредственно только внутри периметра. Типичный сценарий когда у компании есть ADSL соединение с настроенной виртуальной сетью 192.168.*.* и динамическим IP со стороны провайдера. Для ускорения доступа к данным, часть информации должна кешироваться на сервере провайдера или в облаке, а операции резервирования должны отрабатываться только на актуальных наборах данных.

Начнем мы с вами реализацию такого сценария с создания сервиса доступа к нашим данным с использованием WCF Data Service. В качестве демонстрационного приложения я буду использовать MVC Music Store. Необходимо скачать данный проект и развернуть его локально. Решение содержит ASP. NET MVC проект, который содержит базу данных и необходимые файлы для обеспечения работоспособности сайта

Схема базы данных MvcMusicStore следующая

EF модель StoreDb, которая в точности повторяет схему данных

Откомпилируйте проект и запустите его. Если с первого раза не запустится, то, скорее всего, проблема в строке соединения. Необходимо будет задать правильные параметры для MusicStoreEntities и LocalSqlServer в конфигурационном файле Web. config

После этого можем приступить к созданию WCF Data Service. Для этого добавим в решение ASP. NET Empty Web Application проект и назовем его WCFDataServiceHost. Добавим в созданный проект папку Models и скопируем модель StoreDB. edmx. Скопируем строки соединения из конфигурационного файла проекта сайта.

Добавим в проект WCFDataServiceHost новый элемент WCF Data Service и назовем его StoreDBDataService. svc.

После успешного создания в студии откроется файл сервиса

Заменяем /* TODO: put your data source class name here */ на MvcMusicStore. Models. MusicStoreEntities

И добавляем элементы конфигурации. В результате наш сервис должен выглядеть следующим образом:

Сохраняем, компилируем и по правой кнопке мышки над файлом нашего сервиса в контекстном меню выбираем View in Browser

Если все правильно настроено, то в результате получим ответ нашего сервиса

Теперь необходимо сконфигурировать веб-сайт или приложение в IIS и опубликовать наш сервис. Для этого откроем консоль управления IIS и перейдем в раздел Application Pools, где создадим новый пул с именем WCFDataServiceHostAppPool и выберем 4 версию. Net Framework.

После этого создадим веб-сайт или приложение WCFDataServiceHost и выберем для него созданный пул приложения

Теперь мы можем опубликовать наш сервис. Для это в Visual Studio правой кнопкой над проектом сервиса и из контекстного меню выбираем Publish

В диалоговом окне выбираем Publish method: File System

Жмем на кнопку напротив Target Location и выбираем в диалоге Local IIS и указываем ранее созданный сайт или приложение (если окно не открылось, то необходимо перезапустить Visual Studio с правами локального администратора).

Нажимаем Open для закрытия диалога выбора, и в диалоге публикации нажимаем Publish. Если все прошло нормально, то наш сервер опубликован и готов к использованию. Запускаем браузер и проверяем что сервис работает

Теперь хотелось бы иметь несколько дополнительных возможностей для управления и мониторинга работы нашего сервиса. Такие возможности нам может предоставить Windows Server AppFabric.

Устанавливаем Windows Server AppFabric и после этого открываем консоль управления IIS и переходим к нашему приложению. На панели проекта появились три новых инструмента: AppFabric Dashboard, Endpoints и Services.

На правой панели появилась ссылка для настройки сервисов. Нажимаем Configure.

Откроется окно, в котором мы можем задать дополнительные настройки нашего приложения.

На этом шаге я хотел бы настроить авто запуск сервиса с помощью Auto-Start функциональности AppFabric. Для этого я перейду в раздел Auto-Start и выберу опцию Сustom

В появившемся диалоге нажимаем Yes и затем OK.

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

Выбираем наш сервис и жмем Configure на панели справа. Если появится диалог, нажимаем Yes. Откроется диалог настройки сервиса

Переходим в раздел Auto-Start и выбираем Enable для нашего сервиса. Закрываем окно настройки сервиса.

Теперь наш сервис будет автоматически запускаться и пул приложения будут оставаться с рабочем состоянии при любых условиях. Конфигуратор внес изменения в настройки нашего пула и приложения, для обеспечения данной функциональности, а также в наш web. config. Чтобы увидеть изменения, необходимо перейти в папку размещения приложения (в моем случае C:\inetpub\wwwroot\WCFDataServiceHost), и посмотреть что было добавлено

Необходимо скопировать это фрагмент и вставить его в web. config нашего проекта. Если этого не сделать, то при последующей публикации эта информацию будет удалена и нам нужно будет заново провести настройку.

Теперь мы можем на панели управления кликнуть AppFabric Dashboard и посмотреть статистику обращения к нашему сервису.


Карта сайта


Информационный сайт Webavtocat.ru