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

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral
К этому моменту приложение уже готово к трассировке, оно может передавать все свои диагностические данные в таблицу, находящуюся в службах хранения. Теперь для просмотра журналов трассировки нужно создать простое средство просмотра журналов, которое будет периодически выполнять запросы к таблице и получать из нее все записи, добавленные с момента выполнения последнего запроса. Добавьте в решение новое консольное приложение. Чтобы создать проект, в меню Файл укажите команду Добавить и выберите Новый проект. В диалоговом окне Добавление нового проекта разверните узел, соответствующий выбранному языку (Visual C# или Visual Basic) в представлении в виде дерева Установленные шаблоны, выберите категорию Windows, а затем шаблон Консольное приложение. В качестве имени проекта укажите LogViewer, примите предложенное местоположение внутри папки решения и нажмите кнопку ОК. Щелкните правой кнопкой мыши новый проект LogViewer в обозревателе решений и выберите пункт Свойства. Для проектов Visual C#. В окне свойств перейдите на страницу Приложение и для параметра Целевая платформа задайте значение. NET Framework 4. Рис. 13 Настройка целевой платформы для проекта (Visual C#) Для проектов Visual Basic. В окне свойств перейдите на страницу Компилятор и щелкните Дополнительные параметры компилятора. В диалоговом окне Дополнительные параметры компилятора выберите. NET Framework 4 в раскрывающемся списке Целевая платформа и нажмите кнопку ОК. Рис. 14 Настройка целевой платформы для проекта (Visual Basic) Примечание. Профиль клиента в данном случае не подходит, поскольку для получения данных журнала из хранилища таблиц приложение будет использовать API-интерфейс StorageClient. Этот API-интерфейс работает на основе функций, которые имеются только в полной версии платформы. NET Framework 4. Если на экране откроется диалоговое окно Изменение целевой платформы, нажмите кнопку Да. Рис. 15 Изменение целевой платформы Добавьте ссылки на сборки, которые требуются для этого проекта. Для этого в обозревателе решений щелкните правой кнопкой мыши проект LogViewer и выберите команду Добавить ссылку. В диалоговом окне Добавление ссылки перейдите на вкладку. NET и, удерживая нажатой клавишу CTRL для выбора нескольких элементов, выберите System. Configuration, Microsoft. WindowsAzure. StorageClient и System. Data. Services. Client, а затем нажмите кнопку ОК. Теперь добавьте в решение ссылку на диагностический проект. Повторите предыдущий шаг и откройте диалоговое окно Добавление ссылки, только на этот раз перейдите на вкладку Проекты, выберите проект AzureDiagnostics и нажмите кнопку ОК. Добавьте в проект класс для отображения простого индикатора выполнения в окне консоли. Для этого в обозревателе решений щелкните правой кнопкой мыши проект LogViewer, укажите команду Добавить и выберите Существующий элемент. В диалоговом окне Добавление существующего элемента перейдите в папку Assets в папке Source практической работы, выберите папку, соответствующую языку проекта (Visual C# или Visual Basic), выберите файл ProgressIndicator.[cs|.vb] и нажмите кнопку Добавить. В обозревателе решений дважды щелкните файл Program. cs или Module1.vb, чтобы открыть его и вставить в начало файла следующие объявления пространств имен. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer namespaces-CS) C# using System. Configuration; using System. Data. Services. Client; using System. Threading; using Microsoft. WindowsAzure; using Microsoft. WindowsAzure. StorageClient; using AzureDiagnostics; (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer namespaces-VB) Visual Basic Imports System. Configuration Imports System. Data. Services. Client Imports System. Threading Imports Microsoft. WindowsAzure Imports Microsoft. WindowsAzure. StorageClient Imports AzureDiagnostics В проекте Visual Basic измените функцию Sub Main, сделав ее Public и добавив параметр строкового массива с именем args. Visual Basic Module Module1   Public Sub Main(ByVal args() As String)   End Sub End Module Определите следующие (выделенные) элементы в классе Program (для проектов Visual C#) или в модуле Module1 (для проектов Visual Basic). (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer static members-CS) C# class Program {   private static string lastPartitionKey = String. Empty;   private static string lastRowKey = String. Empty;   static void Main(string[] args)   {   } } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer static members-VB) Visual Basic Module Module1   Private lastPartitionKey As String = String. Empty   Private lastRowKey As String = String. Empty   Public Sub Main(ByVal args() As String)   End Sub End Module Затем вставьте метод QueryLogTable в этот класс или модуль. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-QueryLogTable method-CS) C# class Program {   ...   private static void QueryLogTable(CloudTableClient tableStorage)   {   TableServiceContext context = tableStorage. GetDataServiceContext();   DataServiceQuery query = context. CreateQuery<LogEntry>(TableStorageTraceListener. DIAGNOSTICS_TABLE)   .Where(entry => entry. pareTo(lastPartitionKey) > 0   || (entry. PartitionKey == lastPartitionKey && entry. pareTo(lastRowKey) > 0))   as DataServiceQuery;   foreach (AzureDiagnostics. LogEntry entry in query. Execute())   {   Console. WriteLine("{0} - {1}", entry. Timestamp, entry. Message);   lastPartitionKey = entry. PartitionKey;   lastRowKey = entry. RowKey;   }   }

  ...

НЕ нашли? Не то? Что вы ищете?
} (Фрагмент кода Ї WindowsAzureDebugging-Ex1-QueryLogTable method-VB) Visual Basic Module Module1   ...   Private Sub QueryLogTable(ByVal tableStorage As CloudTableClient)   Dim context As TableServiceContext = tableStorage. GetDataServiceContext()   Dim query As DataServiceQuery = TryCast(context. CreateQuery(Of LogEntry)(TableStorageTraceListener. DIAGNOSTICS_TABLE).Where(Function(entry) entry. pareTo(lastPartitionKey) > 0 OrElse (entry. PartitionKey = lastPartitionKey AndAlso entry. pareTo(lastRowKey) > 0)), DataServiceQuery)   For Each entry As AzureDiagnostics. LogEntry In query. Execute()   Console. WriteLine("{0} - {1}", entry. Timestamp, entry. Message)   lastPartitionKey = entry. PartitionKey   lastRowKey = entry. RowKey   Next   End Sub   ... End Module Примечание. Строки в таблице журнала диагностики хранятся с первичным ключом, состоящим из свойства ключа секции и строки, причем оба этих свойства основаны на счетчике событий соответствующей записи журнала, поэтому они располагаются в хронологическом порядке. Метод QueryLogTable выполняет запрос к таблице, чтобы получить все строки, значение первичного ключа которых больше, чем последнее значение, полученное при предыдущем вызове этого метода. Это гарантирует, что при каждом вызове метод будет получать только новые записи, добавленные в журнал. И наконец, чтобы завершить внесение изменений, вставьте следующий (выделенный) код в метод Main. (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer Main method-CS) C# class Program {   ...   static void Main(string[] args)   {   string connectionString = (args. Length == 0) ? "Microsoft. WindowsAzure. Plugins. Diagnostics. ConnectionString" : args[0];   CloudStorageAccount account = CloudStorageAccount. Parse(ConfigurationManager. AppSettings[connectionString]);   CloudTableClient tableStorage = account. CreateCloudTableClient();   tableStorage. CreateTableIfNotExist(TableStorageTraceListener. DIAGNOSTICS_TABLE);   Utils. ProgressIndicator progress = new Utils. ProgressIndicator();   Timer timer = new Timer((state) =>   {   progress. Disable();   QueryLogTable(tableStorage);   progress. Enable();   }, null, 0, 10000);   Console. ReadKey(true);   } } (Фрагмент кода Ї WindowsAzureDebugging-Ex1-LogViewer Main method-VB) Visual Basic Module Module1   ...   Public Sub Main(ByVal args() As String)   Dim connectionString As String = If((args. Length = 0), "Microsoft. WindowsAzure. Plugins. Diagnostics. ConnectionString", args(0))   Dim account As CloudStorageAccount = CloudStorageAccount. Parse(ConfigurationManager. AppSettings(connectionString))   Dim tableStorage As CloudTableClient = account. CreateCloudTableClient()   tableStorage. CreateTableIfNotExist(TableStorageTraceListener. DIAGNOSTICS_TABLE)   Dim progress As New ProgressIndicator()   Dim timer As New Timer(Sub(state)   progress. Disable()   QueryLogTable(tableStorage)   progress. Enable()   End Sub, Nothing, 0, 10000)   Console. ReadKey(True)   End Sub End Module Примечание. Вставленный код инициализирует данные учетной записи хранилища Windows Azure, при необходимости создает диагностическую таблицу, а затем запускает таймер, который периодически вызывает метод QueryLogMethod, определенный в предыдущем шаге, для отображения новых записей из журнала диагностики. Чтобы завершить создание средства просмотра, откройте файл App. config из проекта LogViewer и вставьте следующий (выделенный) раздел appSettings, чтобы определить параметр DiagnosticsConnectionString, который требуется для инициализации данных учетной записи хранилища. (Фрагмент кода Ї WindowsAzureDebugging-LogViewer DiagnosticConnectionString) XML <configuration>   ...   <appSettings>   <add key="Microsoft. WindowsAzure. Plugins. Diagnostics. ConnectionString" value="UseDevelopmentStorage=true"/>   </appSettings>   <startup>   <supportedRuntime version="v4.0" sku=".NETFramework, Version=v4.0" />   </startup> </configuration>

Проверка

Теперь все готово к выполнению решения в эмуляторе вычислений. Для обеспечения возможности включать прослушиватель трассировки хранилища таблиц динамически, не останавливая работающую службу, службу первоначально разворачивают с отключенным параметром EnableTraceStorageTraceListener, а затем значение этого параметра изменяется в файле конфигурации, чтобы включить прослушиватель, после чего файл передается на сервер, чтобы перенастроить работающую службу. Просмотр сообщений трассировки, формируемых приложением, выполняется с помощью приложения просмотра журнала. Откройте файл Web. config проекта FabrikamInsurance и вставьте следующий (выделенный) раздел customErrors в качестве прямого потомка элемента system. web. XML <configuration>   ...   <system. web>   ...   <customErrors mode="On" />   </system. web>   ... </configuration> Примечание. Когда режиму customErrors задается значение On, отображает стандартные сообщения об ошибке как для локального, так и для удаленного клиента. Если же режим customErrors имеет параметр по умолчанию RemoteOnly, то после развертывания приложения в Windows Azure и удаленного доступа к нему будут отображаться стандартные сообщения об ошибках, поэтому эти шаги выполнять не обязательно. Однако это позволяет воспроизвести локально то поведение, которое можно было бы наблюдать после развертывания приложения в облаке. Чтобы протестировать решение, необходимо настроить проект Windows Azure и приложение просмотра журнала, чтобы они запускались одновременно. Чтобы определить проекты, запускаемые автоматически, щелкните правой кнопкой мыши узел решения в обозревателе решений и выберите пункт Установить автоматически запускаемые проекты. В окне Страницы свойств решения «Begin» выберите Автоматически запускаемый проект в разделе Общие свойства, а затем выберите параметр Несколько запускаемых автоматически проектов. Затем параметру Action для проектов LogViewer и FabrikamInsuranceService задайте значение Start. У остальных проектов этот параметр должен иметь значение None. Нажмите кнопку OК, чтобы сохранить изменения, внесенные в настройки автоматического запуска. Рис. 16 Настройка автоматически запускаемых проектов для решения Нажмите клавиши CTRL + F5, чтобы запустить приложение, не подключая к нему отладчик. Опять же при этом будут воссозданы условия, в которых приложение работает после развертывания в облаке. Подождите завершения развертывания, пока в браузере не откроется главная страница приложения. Заполните открывшуюся в окне браузера форму, выбрав «PORSCHE» в качестве значения поля Марка автомобиля и «BOXSTER (BAD DATA)» в качестве значения поля Модель. Обратите внимание на то, что на этот раз, поскольку вы включили параметр customErrors в файле Web. config, приложение отображает стандартную страницу с сообщением об ошибке вместо подробных сведений об исключении, которые отображались ранее. Именно эту страницу вы бы увидели, если бы приложение было развернуто в Windows Azure. Рис. 17 Ошибка приложения при включенном параметре customErrors Ознакомьтесь с данными, отображаемыми в приложении просмотра журнала. Обратите внимание, что, несмотря на ошибку, окно консоли все еще пусто, поскольку в настоящее время прослушиватель трассировки хранилища таблиц отключен. Переключитесь в среду Visual Studio и в обозревателе решений разверните узел Роли проекта FabrikamInsuranceService, а затем дважды щелкните роль FabrikamInsurance, чтобы открыть окно ее свойств. Перейдите на страницу Параметры и измените значение параметра EnableTableStorageTraceListener на true. Нажмите CTRL + S, чтобы сохранить внесенные в конфигурацию изменения. Откройте консоль эмулятора вычислений, щелкнув ее значок, расположенный в области уведомлений, правой кнопкой мыши и выбрав пункт Показать пользовательский интерфейс эмулятора вычислений. Запишите идентификатор текущего развертывания. Это заключенное в скобки числовое значение, которое указано рядом с меткой развертывания. Рис. 18 Пользовательский интерфейс эмулятора вычислений, в котором показан идентификатор текущего развертывания Теперь откройте командную строку пакета Windows Azure SDK, выбрав Пуск | Все программы | Windows Azure SDK v1.X | Командная строка Windows Azure SDK. Чтобы запустить командную строку от имени администратора, щелкните ее ярлык в меню Пуск правой кнопкой мыши и выберите Запуск от имени администратора. Измените текущий каталог на расположение облачного проекта FabrikamInsuranceService внутри папки текущего решения. В этой папке находятся файлы конфигурации службы, выберите ServiceConfiguration. Local. cscfg. В командной строке выполните следующую команду, чтобы обновить конфигурацию работающего развертывания. Замените заполнитель [DEPLOYMENTID] на значение, которое вы записали ранее. Командная строка Windows Azure csrun /update:[DEPLOYMENTID];ServiceConfiguration. Local. cscfg Рис. 19 Обновление конфигурации работающей службы Примечание. При работе с приложениями, развернутыми в облаке, конфигурация действующего приложения обычно обновляется через портал разработчиков Windows Azure или при помощи API-интерфейса управления Windows Azure, который используется для передачи нового файла конфигурации. После обновления конфигурации и включения прослушивателя трассировки вернитесь в окно браузера, перейдите на страницу Калькулятор и снова введите те же параметры, которые ранее вызвали ошибку (марка «PORSCHE», модель «BOXSTER (BAD DATA)»). Затем нажмите кнопку Рассчитать, чтобы снова отправить форму. В ответ вы должны опять получить страницу с сообщением об ошибке. Перейдите в окно средства просмотра журнала и подождите несколько секунд, пока оно не обновится. Обратите внимание на то, что теперь консоль показывает запись с сообщением об ошибке для необработанного исключения, что свидетельствует о том, что данные трассировки, сформированные работающим приложением, записываются непосредственно в хранилище таблиц. Рис. 20 Средство просмотра, отображающее ошибку, занесенную в хранилище таблиц Для просмотра данных других информационных сообщений трассировки вернитесь в окно браузера и щелкните Сведения, а затем Калькулятор, чтобы выполнить оба действия в контроллере. Напомним, что вы вставили сообщения трассировки в начало каждого метода. Обратите внимание на то, что теперь в консоли средства просмотра отображается сообщение для каждого из этих действий. Рис. 21 Средство просмотра, отображающее информационные сообщения трассировки для действий контроллера Находясь в окне средства просмотра журнала, нажмите любую клавишу, чтобы закрыть программу. И наконец, удалите работающее в эмуляторе вычислений развертывание. Для этого щелкните развертывание правой кнопкой мыши в представлении в виде дерева Развертывания служб и выберите Удалить.

Сводка

Выполнение этой практической работы позволило вам познакомиться с простыми методами отладки, предназначенными для устранения неисправностей приложения Windows Azure после его развертывания в облаке. Вы узнали, как с помощью стандартных методов диагностики. NET записывать диагностические данные непосредственно в хранилище таблиц с помощью пользовательского прослушивателя трассировки.

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