Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При отладке веб-приложения незаменимы хорошие журналы трассировки. В этом руководстве показано, как включить трассировку в веб-API ASP.NET. Эту функцию можно использовать для трассировки того, что делает платформа веб-API до и после вызова контроллера. Его также можно использовать для трассировки собственного кода.
Версии программного обеспечения, используемые в руководстве
- Visual Studio 2017 (также работает с Visual Studio 2015)
- Веб-API 2
- Microsoft.AspNet.WebApi.Tracing
Включение трассировки System.Diagnostics в веб-API
Сначала мы создадим новый проект веб-приложения ASP.NET. В Visual Studio в меню "Файл " выберите "Создать>проект". В разделе "Шаблоны" в интернете выберите ASP.NET веб-приложение.
Выберите шаблон проекта веб-API.
В меню "Сервис" выберите Диспетчер пакетов NuGet, а затем консоль управления пакетами.
В окне консоли диспетчера пакетов введите следующие команды.
Install-Package Microsoft.AspNet.WebApi.Tracing
Update-Package Microsoft.AspNet.WebApi.WebHost
Первая команда устанавливает последний пакет трассировки веб-API. Он также обновляет основные пакеты веб-API. Вторая команда обновляет пакет WebApi.WebHost до последней версии.
Замечание
Если вы хотите использовать определенную версию веб-API, используйте флаг -Version при установке пакета трассировки.
Откройте файл WebApiConfig.cs в папке App_Start. Добавьте следующий код в метод Register .
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code
config.EnableSystemDiagnosticsTracing();
// Other configuration code not shown.
}
}
Этот код добавляет класс SystemDiagnosticsTraceWriter в конвейер веб-API. Класс SystemDiagnosticsTraceWriter записывает трассировки в System.Diagnostics.Trace.
Чтобы просмотреть трассировки, запустите приложение в отладчике. В браузере перейдите к /api/values.
Инструкции трассировки записываются в окно вывода в Visual Studio. (В меню "Вид " выберите "Вывод").
Так как SystemDiagnosticsTraceWriter записывает трассировки в System.Diagnostics.Trace, можно зарегистрировать дополнительные прослушиватели трассировки; Например, для записи трассировок в файл журнала. Дополнительные сведения о записи трассировок см. в разделе "Прослушиватели трассировки " в MSDN.
Настройка SystemDiagnosticsTraceWriter
В следующем коде показано, как настроить трассировщик.
SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = true;
traceWriter.MinimumLevel = TraceLevel.Debug;
Существует два параметра, которые можно контролировать.
- IsVerbose: если значение false, каждая трассировка содержит минимальную информацию. Если значение true, трассировки содержат дополнительные сведения.
- MinimumLevel: задает минимальный уровень трассировки. Уровни логгирования, в порядке возрастания важности: Отладка, Информация, Предупреждение, Ошибка и Критическая ошибка.
Добавление трассировок в приложение веб-API
Добавление трассировщика обеспечивает моментальный доступ к трассировкам, созданным конвейером веб-API. Вы также можете использовать трассировщик для трассировки собственного кода.
using System.Web.Http.Tracing;
public class ProductsController : ApiController
{
public HttpResponseMessage GetAllProducts()
{
Configuration.Services.GetTraceWriter().Info(
Request, "ProductsController", "Get the list of products.");
// ...
}
}
Чтобы получить средство записи трассировки, вызовите HttpConfiguration.Services.GetTraceWriter. С контроллера этот метод доступен через свойство ApiController.Configuration .
Чтобы написать трассировку, можно вызвать метод ITraceWriter.Trace напрямую, но класс ITraceWriterExtensions определяет некоторые методы расширения, которые более понятны. Например, приведенный выше метод Info создает трассировку с информацией о уровне трассировки.
Инфраструктура трассировки веб-API
В этом разделе описывается, как писать пользовательский механизм записи трассировки для веб-API.
Пакет Microsoft.AspNet.WebApi.Tracing построен на основе более общей инфраструктуры трассировки в веб-API. Вместо использования Microsoft.AspNet.WebApi.Tracing можно также подключить к другой библиотеке трассировки и ведения журнала, например NLog или log4net.
Чтобы собрать трассировки, реализуйте интерфейс ITraceWriter. Ниже приведен простой пример:
public class SimpleTracer : ITraceWriter
{
public void Trace(HttpRequestMessage request, string category, TraceLevel level,
Action<TraceRecord> traceAction)
{
TraceRecord rec = new TraceRecord(request, category, level);
traceAction(rec);
WriteTrace(rec);
}
protected void WriteTrace(TraceRecord rec)
{
var message = string.Format("{0};{1};{2}",
rec.Operator, rec.Operation, rec.Message);
System.Diagnostics.Trace.WriteLine(message, rec.Category);
}
}
Метод ITraceWriter.Trace создает трассировку. Вызывающий объект задает категорию и уровень трассировки. Категория может быть любой определяемой пользователем строкой. Реализация Trace должна выполнять следующие действия:
- Создайте объект TraceRecord. Инициализируйте его с помощью запроса, категории и уровня трассировки, как показано. Эти значения предоставляются вызывающим абонентом.
- Вызовите делегата traceAction. В этом делегате вызывающий должен заполнить остальную часть TraceRecord.
- Напишите TraceRecord, используя любой способ ведения журнала, который вам нравится. Пример, показанный здесь, просто вызывает System.Diagnostics.Trace.
Настройка записи трассировки
Чтобы включить трассировку, необходимо настроить веб-API, чтобы оно использовало вашу реализацию ITraceWriter. Это можно сделать с помощью объекта HttpConfiguration , как показано в следующем коде:
public static void Register(HttpConfiguration config)
{
config.Services.Replace(typeof(ITraceWriter), new SimpleTracer());
}
Только один модуль записи трассировки может быть активным. По умолчанию веб-API задает трассировщик no-op, который ничего не делает. (Трассировщик "no-op" существует для того, чтобы код трассировки не должен был проверять, является ли модуль записи трассировки null перед записью трассировки.)
Как работает трассировка веб-API
Трассировка в веб-API использует шаблон фасада : при включении трассировки веб-API упаковывает различные части конвейера запросов с классами, выполняющими вызовы трассировки.
Например, при выборе контроллера конвейер использует интерфейс IHttpControllerSelector . При включенной трассировке конвейер вставляет класс, реализующий IHttpControllerSelector, однако все вызовы передаются реальной реализации:
К преимуществам этого дизайна относятся следующие преимущества:
- Если модуль трассировки не добавлен, то компоненты трассировки не инстанцируются и не влияют на производительность.
- Если вы заменяете службы по умолчанию, такие как IHttpControllerSelector собственной пользовательской реализацией, трассировка не затрагивается, так как трассировка выполняется объектом-оболочкой.
Вы также можете заменить всю платформу трассировки веб-API собственной пользовательской платформой, заменив службу ITraceManager по умолчанию:
config.Services.Replace(typeof(ITraceManager), new MyTraceManager());
Реализуйте ITraceManager.Initialize для инициализации системы трассировки. Помните, что это заменяет всю платформу трассировки, включая весь код трассировки, встроенный в веб-API.