Главная » Просмотр файлов » Диссертация

Диссертация (1148251), страница 22

Файл №1148251 Диссертация (Инструменты аспектно-ориентированного программирования облачных веб-приложений в Microsoft Azure разработка и реализация в системе Aspect.NET) 22 страницаДиссертация (1148251) страница 222019-06-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 22)

В неё входятследующие функциональные блоки:1) Caching Application Block для поддержки кэширования;2) Cryptography Application Block для поддержки шифрования;3) Data Access Application Block для поддержки работы с базами данных;4) Exception Handling Application Block для реализации стратегийобработки исключений;5) Logging Application Block для поддержки протоколирования;6) Security Application Block для поддержки авторизации и безопасностиприложений;7) Validation Application Block для поддержки механизмов валидацииданных бизнес-объектов.122В 2011 году компания Microsoft выпустила расширение Enterprise LibraryIntegration Pack for Microsoft Azure [63], которое содержит функциональные блокидляуправленияпроизводительностью(AutoscalingApplicationBlock)иограничения функциональности под нагрузкой (Transient Fault Handling Block).Программист может реализовать ту или иную “сквозную” функциональность,если в исходном коде своего проекта вызовет методы из набора классовсоответствующего функционального блока.

С точки зрения АОП очевидно, чтоместоположение этих вызовов в исходном коде целевого приложения являетсясовокупностью точек внедрения для действий соответствующего аспекта.Для практического ознакомления с EL Integration Pack for Windows Azureкомпания Microsoft предлагает серию лабораторных работ (Hands-on Labs).Программисту предоставляется исходный проект и методические указания по егопошаговому изменению. Полученный результат можно сравнить с эталоннымконечнымпроектом,вкоторомтеперьзадействуетсятотилиинойфункциональный блок EL Integration Pack for Windows Azure. Если на основе этихметодических указаний составить аспект и применить его с помощью Aspect.NETкначальномупроекту,торезультирующаясборкабудетобладатьфункциональностью соответствующего эталонного проекта, но без модификациикода исходного проекта.6.2 Logging Application BlockРассмотрим упражнение “Hands-on Lab 1: Using the Logging ApplicationBlock with Windows Azure Storage”, где путем добавления ссылок на сборки ELпроизводится подключение функционального блока логгирования к исходномупроекту, а затем вызов его метода для передачи сообщения в облачное хранилищедиагностическойинформацииWAD.Этодаетвозможностьнастраиватьпараметры сбора и хранения отладочных сообщений через графическийинтерфейс Logging Application Block, либо через его конфигурационные файлы.123//Веб-роль, на странице которой тестируется Logging Application Blockpublic partial class Default : System.Web.UI.Page{//Сообщение отсылается в обработчике щелчка мыши по кнопке страницыprotected void LogButton_Click(object sender, EventArgs e) {Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write("Message from the Logging Application Block");}}ЛИСТИНГ 52.

ИСХОДНЫЙ КОД ПРОТОКОЛИРОВАНИЯ ДЕЙСТВИЙИтак, задача заключается в том, чтобы перенести все зависимости от EL ивызовы методов протоколирования в отдельный проект с аспектом. Применивзатем с помощью Aspect.NET данный аспект к исходному проекту, мы получимего бесшовную интеграцию с Logging Application Block.Традиционно в Aspect.NET подобные задачи решаются размещением кодапротоколирования в действии аспекта и вставкой его перед, после, или вместовызова целевого метода в исходном проекте. В нашем случае целевой метод — этообработчик события щелчка мыши LogButton_Click() класса веб-страницыDefault, причем созданием объекта этого класса и отправкой ему событийзанимается среда ASP.NET и сервер IIS. Это означает, что код вызова нашегоцелевого метода располагается вне сборки исходного проекта и недоступенAspect.NET.

Как продемонстрированно в разделе 3.3, в таких случаях необходимоиспользоватьподменуцелевогоклассачерезаспектногоReplaceBaseClass://Проект с замещающим аспектным наследником[AspectDotNet.ReplaceBaseClass]public class AspectClass : Default {protected void LogButton_Click(object sender, EventArgs e) {Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Write("Message from the Logging Application Block");base.LogButton_Click(sender, e);}}//Исходный проект, после отделения зависимости от Logging Application Blockpublic partial class Default : System.Web.UI.Page{protected void LogButton_Click(object sender, EventArgs e) {}}ЛИСТИНГ 53. ПРОТОКОЛИРОВАНИЕ, ВЫНЕСЕНОЕ В АСПЕКТнаследника1246.3 Autoscaling Application BlockРассмотрим теперь “Hands-on Lab 6: Implementing Throttling Behavior”, гдеиллюстрируется ограничение функциональности под нагрузкой с использованиемсервисов функционального блока Autoscaling Application Block.

Отдельныйкомпонент Autoscaler занимается мониторингом диагностической информации и,в зависимости от текущей нагрузки на облако, устанавливает свойствоThrottlingMode в файле конфигурации исходного проекта. В зависимости отзначения этого свойства какие-то из методов класса веб-страницы могут изменятьсвое поведение://Веб-роль, на странице которой тестируется Autoscaling Application Blockpublic partial class Default : System.Web.UI.Page{protected override void OnPreRenderComplete(EventArgs e) {base.OnPreRenderComplete(e);string throttlingMode = RoleEnvironment.GetConfigurationSettingValue("ThrottlingMode");switch (throttlingMode){case "HighActivity":this.ThrottlingLabel.Text = "Работа при высокой активности…";break;default:this.ThrottlingLabel.Text = "Работа при обычной активности…";this.DoSomeUsualWork();break;}}}private void DoSomeUsualWork() {/*…*/ }ЛИСТИНГ 54.

ИСХОДНЫЙ КОД ПОВЕДЕНИЯ ПРИ РАЗЛИЧНЫХ УРОВНЯХ НАГРУЗКИДанный метод можно перенести в аспект и тогда целевой класс будетсконцентрирован только на решении своей задачи, в то время как компонентAutoscaler и бесшовная интеграция с аспектом обеспечит реакцию наповышенную нагрузку. Задачу можно было бы решить аналогично предыдущемупримеру, но здесь есть препятствие в виде вызова закрытого в целевом классеметода DoSomeUsualWork().

Для того, чтобы он стал доступным замещающемунаследнику, компоновщик аспектов мог бы принудительно сделать этот методзащищенным.Однакоэтонарушитинкапсуляциюцелевогокласса,иединственный способ сохранить её — использовать рефлексию .NET. Закрытые125члены целевого класса становятся полями его аспектного наследника, которыеинициализируются в конструкторе. Также предположим, что в замещающемнаследнике целевого класса нам понадобится вызвать метод OnPreRenderCompleteследующего по иерархии базового класса System.Web.UI.Page. Защищенные иоткрытые методы целевого класса используются в его замещающем аспектномнаследнике без ограничений. Итоговый аспект представлен ниже:using System.Reflection;[AspectDotNet.ReplaceBaseClass]public class AspectClass : _Default {MethodInfo DoSomeUsualWork, PageOnPreRenderComplete;public AspectClass() {Type BaseType = this.GetType().BaseType;//Получение ссылки на закрытый метод целевого класса _DefaultDoSomeUsualWork = BaseType.GetMethod("DoSomeUsualWork",BindingFlags.NonPublic | BindingFlags.Instance);//Ссылка на метод базового класса System.Web.UI.PagePageOnPreRenderComplete = base.GetType().BaseType.GetMethod("OnPreRenderComplete", BindingFlags.NonPublic |BindingFlags.Instance);}protected override void OnPreRenderComplete(EventArgs e) {//Вызываем метод базового класса System.Web.UI.PagePageOnPreRenderComplete.Invoke(this, new object [] { e });}}string throttlingMode = RoleEnvironment.GetConfigurationSettingValue("ThrottlingMode");switch (throttlingMode) {case "HighActivity"://Использование в аспекте члена целевого класса _Defaultthis.ThrottlingLabel.Text = "Работа при высокойактивности…";break;default:this.ThrottlingLabel.Text = "Работа при обычнойактивности…";//Вызов закрытого члена целевого класса _DefaultDoSomeUsualWork.Invoke(this, null);break;}ЛИСТИНГ 55.

КОД ИЗМЕНЕНИЯ ПОВЕДЕНИЯ ПРИ РАЗЛИЧНЫХ УРОВНЯХ НАГРУЗКИ, ВЫНЕСЕНЫЙ В АСПЕКТ6.4 Transient Fault Handling Application BlockСледующий пример бесшовной интеграции основан на примере “Hands-onLab 11: Transient Fault Handling”. Здесь задача заключается в том, чтобы добавить126в целевой код работы с базой данных стратегию обработки исключительныхситуаций. Сама стратегия отделена от кода, работающего с базой данных, иконфигурируется средствами EL. Например, для любого запроса к базе данныхможно составить стратегию вида: попытаться совершить 4 последовательныхзапроса, если каждый из предыдущих совершается неудачно. При этом междувторым и третьим запросом должна быть пауза в 5 сек.

Исходный код целевогокласса приведен ниже:public class Main : Form {private void ExecuteQueryButton_Click(object sender, EventArgs e) {//…try {using (var connection = newSqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString)) {connection.Open();var command = new SqlCommand("dbo.GetProductDetails",connection){ CommandType = CommandType.StoredProcedure };// …Заполнение параметров command…using (var reader = command.ExecuteReader()) {while (reader.Read()) {//…Обрабатываем результат успешного запроса}}}}catch (Exception ex) {//…}}}ЛИСТИНГ 56. ИСХОДНЫЙ КОД ОБРАБОТКИ ИСКЛЮЧЕНИЙ ПРИ СВЯЗИ С БДЗапроскбазеданныхпроизводитсяспомощьювызоваметодаSqlCommand.ExecuteReader(), который может выбросить исключение при сбоесоединения с базой данных.

Чтобы применить к нему стратегию обработкиисключительных ситуаций, необходимо выполнить данный блок в рамках методаExecuteAction() класса Microsoft.Practices.TransientFaultHandling.RetryPolicy<T>,где T — класс, реализующий стратегию. Получить объект этого класса можночерез специальный менеджер TransientFaultHandling.RetryManager, которыйдолжен быть инициализирован библиотекой EL и передан в конструкторецелевого класса. Для этого требуется %instead-действием заменить при запуске127приложения Application.Run(Main) на создание объекта нашего замещающегонаследника с помощью средств EL:class ChangeRunAspect : AspectDotNet.Aspect{[AspectDotNet.AspectAction("%instead %call *.Application.Run")]static public void ReplaceAction() {Application.Run(EnterpriseLibraryContainer.Current.GetInstance<AspectMain>());}}ЛИСТИНГ 57.

Характеристики

Список файлов диссертации

Инструменты аспектно-ориентированного программирования облачных веб-приложений в Microsoft Azure разработка и реализация в системе Aspect
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее