Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral
В предыдущей задаче было вкратце показано, как отлаживать приложение с помощью среды Visual Studio, когда оно выполняется локально в эмуляторе вычислений. Для отладки приложения после его развертывания в облаке данные отладки необходимо записывать в журналы с тем, чтобы потом диагностировать сбои приложения. В этой задаче вы добавите в проект прослушиватель трассировки, способный заносить диагностические данные непосредственно в хранилище таблиц, откуда их можно легко получить с помощью простого запроса. Исходный код для этого проекта уже имеется в папке Assets практической работы. Дополнительные сведения о прослушивателе трассировки приведены здесь: http://msdn. /ru-RU/library/system. diagnostics. tracelistener. aspx В обозревателе решений щелкните правой кнопкой мыши решение Begin, укажите пункт Добавить и выберите команду Существующий проект. В диалоговом окне Добавление существующего проекта перейдите в папку Assets в папке Source практической работы, выберите папку, соответствующую предпочитаемому языку (Visual C# или Visual Basic), перейдите в папку AzureDiagnostics внутри этой папки, выберите файл проекта AzureDiagnostics и нажмите кнопку Открыть. Добавьте ссылку на библиотеку AzureDiagnostics в проекте веб-роли. Для этого в обозревателе решений щелкните правой кнопкой мыши проект FabrikamInsurance и выберите команду Добавить ссылку. В диалоговом окне Добавление ссылки перейдите на вкладку Проекты в списке проектов, выберите AzureDiagnostics и нажмите кнопку ОК. Откройте Global. asax. cs (для проектов Visual C#) или Global. asax. vb (для проектов Visual Basic) в проекте FabrikamInsurance и вставьте следующие директивы пространства имен. C# using Microsoft. WindowsAzure; using Microsoft. WindowsAzure. ServiceRuntime; VB Imports Microsoft. WindowsAzure Imports Microsoft. WindowsAzure. ServiceRuntime Добавьте следующий (выделенный) метод в класс MvcApplication. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-ConfigureTraceListener-CS) C# public class MvcApplication : System. Web. HttpApplication

{

НЕ нашли? Не то? Что вы ищете?
  ...   private static void ConfigureTraceListener()   {   bool enableTraceListener = false;   string enableTraceListenerSetting = RoleEnvironment. GetConfigurationSettingValue("EnableTableStorageTraceListener");   if (bool. TryParse(enableTraceListenerSetting, out enableTraceListener))   {   if (enableTraceListener)   {   AzureDiagnostics. TableStorageTraceListener listener =   new AzureDiagnostics. TableStorageTraceListener("Microsoft. WindowsAzure. Plugins. Diagnostics. ConnectionString")   {   Name = "TableStorageTraceListener"   };   System. Diagnostics. Trace. Listeners. Add(listener);   System. Diagnostics. Trace. AutoFlush = true;   }   else   {   System. Diagnostics. Trace. Listeners. Remove("TableStorageTraceListener");   }   }   } } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-ConfigureTraceListener-VB) Visual Basic Public Class MvcApplication   Inherits System. Web. HttpApplication   ...   Private Shared Sub ConfigureTraceListener()   Dim enableTraceListener As Boolean = False   Dim enableTraceListenerSetting As String = RoleEnvironment. GetConfigurationSettingValue("EnableTableStorageTraceListener")   If Boolean. TryParse(enableTraceListenerSetting, enableTraceListener) Then   If enableTraceListener Then   Dim listener As New AzureDiagnostics. TableStorageTraceListener("Microsoft. WindowsAzure. Plugins. Diagnostics. ConnectionString") With {.Name = "TableStorageTraceListener"}   System. Diagnostics. Trace. Listeners. Add(listener)   System. Diagnostics. Trace. AutoFlush = True   Else   System. Diagnostics. Trace. Listeners. Remove("TableStorageTraceListener")   End If   End If   End Sub End Class Примечание. Метод ConfigureTraceListener получает параметр конфигурации EnableTableStorageTraceListener и, если его значение равно true, создает новый экземпляр класса TableStorageTraceListener, определенного в проекте, который был ранее добавлен в решение, а затем добавляет в коллекцию имеющихся прослушивателей трассировки. Обратите внимание на то, что метод включает свойство AutoFlush объекта Trace, чтобы обеспечить запись сообщений трассировки непосредственно в хранилище таблиц, что позволяет получать их по мере их возникновения. Теперь вставьте следующий (выделенный) код в метод Application_Start, чтобы настроить издатель параметров конфигурации хранилища Windows Azure, а также включить TableStorageTraceListener. (Фрагмент кода Ї WindowsAzureDebugging-Ex1- Application_Start-CS) C# public class MvcApplication : System. Web. HttpApplication {   ...   protected void Application_Start()   {   CloudStorageAccount. SetConfigurationSettingPublisher((configName, configSetter) =>   {   configSetter(RoleEnvironment. GetConfigurationSettingValue(configName));   });   ConfigureTraceListener();   AreaRegistration. RegisterAllAreas();     RegisterRoutes(RouteTable. Routes);   }   ... } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Application_Start-VB) Visual Basic Public Class MvcApplication   Inherits System. Web. HttpApplication   ...   Sub Application_Start()     CloudStorageAccount. SetConfigurationSettingPublisher(Sub(configName, configSetter) configSetter(RoleEnvironment. GetConfigurationSettingValue(configName)))   ConfigureTraceListener()

  AreaRegistration. RegisterAllAreas()

  RegisterRoutes(RouteTable. Routes)   End Sub   ... End Class Примечание. Прослушиватели трассировки можно добавлять путем их настройки в разделе system. diagnostics файла конфигурации. Однако в данном случае роль создает прослушиватель программно, что позволяет включать его только на тот период, когда он нужен, и на время работы службы. Рис. 10 Включение TableStorageTraceListener в файле конфигурации Теперь определите параметр конфигурации, который будет управлять записью диагностических данных в журнал, выполняемой с помощью TableStorageTraceListener. Чтобы создать этот параметр, разверните узел «Роли» в проекте FabrikamInsuranceService, а затем дважды щелкните роль FabrikamInsurance. В окне свойств роли перейдите на страницу Параметры, щелкните Добавить параметр, а затем задайте новому параметру имя EnableTableStorageTraceListener, в качестве типа укажите String, а в качестве значения Ї false. Рис. 11 Создание параметра конфигурации для включения прослушивателя трассировки Найдите обработчик событий RoleEnvironmentChanging внутри класса WebRole и замените его код следующим фрагментом (выделенным) кода. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-WebRole RoleEnvironmentChanging event handler-CS) C# public class WebRole : RoleEntryPoint {   ...   private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)   {   // для изменения любого параметра конфигурации, кроме EnableTableStorageTraceListener   if (e. Changes. OfType<RoleEnvironmentConfigurationSettingChange>().Any(change => change. ConfigurationSettingName!= "EnableTableStorageTraceListener"))   {   // Чтобы перезапустить этот экземпляр роли, задайте параметру e. Cancel значение true   e. Cancel = true;   }   }   ... } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-WebRole RoleEnvironmentChanging event handler-VB) Visual Basic Public Class WebRole   Inherits RoleEntryPoint   ...   Private Sub RoleEnvironmentChanging(ByVal sender As Object, ByVal e As RoleEnvironmentChangingEventArgs)   ' для изменения любого параметра конфигурации, кроме EnableTableStorageTraceListener   If e. Changes. OfType(Of RoleEnvironmentConfigurationSettingChange)().Any(Function(change) change. ConfigurationSettingName <> "EnableTableStorageTraceListener") Then   ' Чтобы перезапустить этот экземпляр роли, задайте параметру e. Cancel значение true   e. Cancel = True   End If   End Sub   ... End Class Примечание. Событие RoleEnvironmentChanging возникает до того, как изменение конфигурации службы будет применено к работающим экземплярам роли. Обновленный обработчик просматривает коллекцию изменений и перезапускает экземпляр роли при наличии любого изменения параметров конфигурации, если только такое изменение не касается значения параметра EnableTableStorageTraceListener. Если изменяется именно этот параметр, экземпляру роли разрешается применить это изменение без перезапуска. Теперь добавьте следующий (выделенный) код, чтобы определить обработчик для события RoleEnvironmentChanged, в файл Global. asax. cs (для проектов Visual C#) или Global. asax. vb (для проектов Visual Basic). (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Global RoleEnvironmentChanged event handler-CS) C# public class MvcApplication : System. Web. HttpApplication {   ...   private void RoleEnvironmentChanged(object sender, RoleEnvironmentChangedEventArgs e)   {   // настройка прослушивателя трассировки EnableTableStorageTraceListener на любые изменения   if (e. Changes. OfType<RoleEnvironmentConfigurationSettingChange>().Any(change => change. ConfigurationSettingName == "EnableTableStorageTraceListener"))   {   ConfigureTraceListener();   }   }   ... } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Global RoleEnvironmentChanged event handler-VB) Visual Basic Public Class MvcApplication   Inherits System. Web. HttpApplication   ...   Private Sub RoleEnvironmentChanged(ByVal sender As Object, ByVal e As RoleEnvironmentChangedEventArgs)   ' настройка прослушивателя трассировки EnableTableStorageTraceListener на любые изменения   If e. Changes. OfType(Of RoleEnvironmentConfigurationSettingChange)().Any(Function(change) change. ConfigurationSettingName = "EnableTableStorageTraceListener") Then   ConfigureTraceListener()   End If   End Sub   ... End Class Примечание. Обработчик событий RoleEnvironmentChanged вызывается после того, как изменение конфигурации службы было применено к работающим экземплярам роли. Если это изменение касается параметра конфигурации EnableTableStorageTraceListener, обработчик вызывает метод ConfigureTraceListener, чтобы включить или отключить прослушиватель трассировки. И наконец, вставьте следующую (выделенную) строку в метод Application_Start сразу после вызова метода ConfigureTraceListener для подписки на событие Changed объекта RoleEnvironment. C# public class MvcApplication : System. Web. HttpApplication {   ...   protected void Application_Start()   {   CloudStorageAccount. SetConfigurationSettingPublisher((configName, configSetter) =>   {   configSetter(RoleEnvironment. GetConfigurationSettingValue(configName));   });   ConfigureTraceListener();     RoleEnvironment. Changed += RoleEnvironmentChanged;     AreaRegistration. RegisterAllAreas();   RegisterRoutes(RouteTable. Routes);   }   ... } Visual Basic Public Class MvcApplication   Inherits System. Web. HttpApplication   ...   Sub Application_Start()     CloudStorageAccount. SetConfigurationSettingPublisher(Sub(configName, configSetter) configSetter(RoleEnvironment. GetConfigurationSettingValue(configName)))   ConfigureTraceListener()   AddHandler RoleEnvironment. Changed, AddressOf RoleEnvironmentChanged   AreaRegistration. RegisterAllAreas()   RegisterRoutes(RouteTable. Routes)   End Sub   ... End Class Чтобы приложение могло записывать диагностические данные в журнал ошибок, добавьте в него глобальный обработчик ошибок. Для этого добавьте следующий метод в класс MVCApplication. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Application_Error-CS) C# public class MvcApplication : System. Web. HttpApplication {   ...   protected void Application_Error()   {   var lastError = Server. GetLastError();   System. Diagnostics. Trace. TraceError(lastError. Message);   } } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Application_Error-VB) Visual Basic Public Class MvcApplication   Inherits System. Web. HttpApplication   ...   Protected Sub Application_Error()   Dim lastError = Server. GetLastError()   System. Diagnostics. Trace. TraceError(lastError. Message)   End Sub End Class Примечание. Событие Application_Error формируется для записи любых необработанных ошибок при обработке запроса. Показанный ранее обработчик событий получает ссылку на объект необработанного исключения с помощью метода Server. GetLastError, а затем с помощью метода TraceError класса System. Diagnostics. Trace заносит сообщение об ошибке в журнал. Обратите внимание, что объект Trace выдает сообщение всем прослушивателям из своей коллекции Listeners, включая TableStorageTraceListener, если он был включен в параметрах конфигурации. Как правило, в этой коллекции также есть экземпляры класса DefaultTraceListener и DevelopmentFabricTraceListener (при выполнении решения в эмуляторе вычислений). Последний записывает свои выходные данные в журнал, который можно просматривать из пользовательского интерфейса эмулятора вычислений. Для записи в журнал диагностики Windows Azure прослушиватель DiagnosticMonitorTraceListener также можно добавить в файл роли Web. config или App. config. При использовании прослушивателя трассировки этого типа журналы собираются локально в каждой роли. Для их получения сначала необходимо указать, чтобы монитор диагностики копировал эти сведения в службы хранения. В шаблонах проектов ролей, имеющихся в инструментах Windows Azure для Microsoft Visual Studio, уже есть параметры, необходимые для использования DiagnosticMonitorTraceListener в формируемых файлах конфигурации. Рис. 12 Коллекция прослушивателей объекта трассировки с настроенными прослушивателями трассировки Откройте файл QuoteController. cs (для проектов Visual C#) или QuoteController. vb (для проектов Visual Basic) из папки Controllers проекта FabrikamInsurance и добавьте следующий метод. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Controller OnException method-CS) C# [HandleError] public class QuoteController : Контроллер {   ...   protected override void OnException(ExceptionContext filterContext)   {   System. Diagnostics. Trace. TraceError(filterContext. Exception. Message);   } } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-Controller OnException method-VB) Visual Basic <HandleError()> Public Class QuoteController   Inherits Controller   ...   Protected Overrides Sub OnException(ByVal filterContext As ExceptionContext)   System. Diagnostics. Trace. TraceError(filterContext. Exception. Message)   End Sub End Class Примечание. Метод OnException вызывается при возникновении необработанного исключения во время обработки действия в контроллере. При работе с приложениями MVC необработанные исключения обычно отслеживаются на уровне контроллера при условии, что они возникают во время выполнения действия контроллера, а также при наличии у действия (или контроллера) атрибута HandleErrorAttribute. Для занесения в журнал исключений в действиях контроллера необходимо переопределить метод OnException контроллера, поскольку событие Application_Error не формируется, когда фильтр обработки ошибок отслеживает исключения. По умолчанию, когда метод действия с атрибутом HandleErrorAttribute формирует какое‑либо исключение, MVC отображает представление Ошибка, расположенное в папке ~/Views/Shared. Помимо регистрации ошибок, трассировку можно использовать для записи других важных событий, возникающих во время выполнения приложения. Например, для регистрации вызовов определенных действий контроллера. Чтобы посмотреть, как это работает, вставьте следующую (выделенную) инструкцию трассировки в начало метода Calculator, чтобы заносить в журнал сообщение при каждом вызове этого действия. C# public class QuoteController : Контроллер {   ...   public ActionResult Calculator()   {   System. Diagnostics. Trace. TraceInformation("Calculator called...");   QuoteViewModel model = new QuoteViewModel();   PopulateViewModel(model, null);   return View(model);   }   ... } Visual Basic Public Class QuoteController   Inherits Controller   ...   Public Function Calculator() As ActionResult   System. Diagnostics. Trace. TraceInformation("Calculator called...")   Dim model As New QuoteViewModel()   PopulateViewModel(model, Nothing)   Return View(model)   End Function   ... End Class Аналогичным образом добавьте инструкцию трассировки, приведенную (выделенную) далее, в действие About. C# public class QuoteController : Контроллер {   ...   public ActionResult About()   {   System. Diagnostics. Trace. TraceInformation("About called...");   return View();   }   ... } Visual Basic Public Class QuoteController   Inherits Controller   ...   Public Function About() As ActionResult   System. Diagnostics. Trace. TraceInformation("About called...")   Return View()   End Function   ... End Class

Задача 4. Создание средства просмотра журнала

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3