3. Ассистент программиста 1С
www.1cfr.ru
Ведение списка конфигураций 1С для
отслеживания обновлений
Ведение клиентской базы
Оповещения на мобильном устройстве
Единая Google аутентификация
Отправка скриншотов клиентами
Отправка видео записей рабочего стола
4. Storage
Как это все увязано в проекте
1cfr.ru
Сайт
Мобильное
приложение
Ассистент
Cloud Services
Worker Role
Web Role
Redis
CacheTables
Queue
Blob
Rest запросы
JSON ответы
Скриншоты
Видео
Файлы
Ресайз и
обработка
графики
Ссылки на файлы
Сессии
Подключения к ассистенту
Обновление статистики
Получение
ссылок на
файлы
6. Требования к проекту:
Программист
•Минимум кода
для быстрого
создания
прототипа
•Минимум усилий
на изобретение
велосипедов
•Возможность
масштабировать
проект
•Безопасноть
готового решения
Androidклиент
•Общение с
сервером через
REST-API
•Поддержка
начиная с версии
2.1
Сервер
•Масштабирование
•Минимум
администрирования
•Безопасность
•Цена
7. Azure Cloud Services
Масштабирование
•Одним кликом можно менять количество
единиц. Возможность автоматического
масштабирования
WCF для создания RESTfull сервиса
•Visual Studio 2012 поддерживает из коробки
создание шаблонов проектов для Azure
Services
8. Пример кода для простого WCF
сервиса
[ServiceContract]
public partial class helloWorld {
…
[OperationContract]
[WebGet(UriTemplate = "/test/{testWord}", ResponseFormat =
WebMessageFormat.Json)]
public String testException(String testWord)
{ return “Hello world: ” + testWord;}
…
}
Добавить в файл *.svc <%@ ServiceHost Debug="true"
Factory="System.ServiceModel.Activation.WebServiceHostFactory“
Service…" %>
9. Хранение данных
SQL
• Можно арендовать как виртуальную машину так и
отдельно сервис SQL сервера
Tables
• Легко создавать и модифицировать структуру. Azure
берет все на себя
• Отсутствие головной боли с транзакциями
• Гораздо дешевле при больших объемах данных
• Быстрый поиск записей по RowKey + PartitionKey
10. Пример описания структуры
таблицы
public class testTable : TableEntity
{
public String testField {get; set;}
...
}
...
TableOperation.InsertOrReplace(entity);
11. «Тяжелые» операции: Insert, Delete,
обработка файлов / изображений
Можно усложнять код, увеличивать процессорные мощности
Можно выделить отдельный процесс для обработки заданий, что
увеличит отзывчивость сервиса в целом
Создаем очередь Azure Queue
Создаем WorkerRole для обработки сообщений из очередей
Получение сообщения: testQueue.GetMessage()
Удаление обработанного: testQueue.DeleteMessage()
Есть возможность отображать сообщение повторно, если оно не
обработано.
Увеличиваем количество экземпляров, если необходимо
12. Работа с файлами
Возможность получить огромные объемы для службы Azure
Storage (100 000 гб)
4 строчки кода выдавать ссылку на загрузку/выгрузку файла с
ограничением по времени
SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy() {
SharedAccessExpiryTime = DateTime.UtcNow - TimeSpan.FromMinutes(10),
SharedAccessStartTime = DateTime.UtcNow + TimeSpan.FromMinutes(50)};
blockBlobWr.GetSharedAccessSignature(policy)
Это повышает безопасность и позволяет не хранить ключи
доступа на клиентских приложениях для загрузки.
13. Кэш
In Role Caching
Позволяет кэшировать объекты для доступа из всех экземпляров
Можно установить TTL для именованного кэша
Redis Cache
Общая служба, доступ к которой можно получить из любой службы
Можно хранить текстовые и числовые данные
Можно установить TTL для любой позиции добавляемой в кэш