Как можно измерить время, необходимое для отправки ответа по сети, в базовой веб-службе ASP.Net? - PullRequest
1 голос
/ 03 мая 2019

У меня есть конечная точка веб-сервиса (метод get), который возвращает довольно большой кусок данных JSON. Я хочу измерить количество времени, необходимое для передачи его по сети клиенту. Я не хочу включать время, необходимое для сбора данных или сериализации их в JSON, просто время передачи по сети. Я не думаю, что смогу сделать это в самом методе get, так как он только возвращает данные, передача должна произойти через некоторое время после завершения запроса. Я возвращаю ответ от метода get следующим образом: return Ok(content) где content - это объект .Net, поэтому я позволяю ASP.Net Core обрабатывать сериализацию в JSON.

1 Ответ

1 голос
/ 03 мая 2019

Я думаю, вы можете использовать Фильтры результатов .Вы можете запустить StopWatch в OnResultExecuting, который выполняется, когда результат метода действия вот-вот будет отправлен.Затем остановите StopWatch в OnResultExecuted, который выполняется, когда результат отправляется клиенту.Затем зарегистрируйте ElapsedMilliseconds

public class ResponseTimeAttribute : ResultFilterAttribute
{
    private readonly ILogger<ResponseTimeAttribute> _logger;
    private static Stopwatch _stopwatch;

    public ResponseTimeAttribute(ILogger<ResponseTimeAttribute> logger)
    {
        _stopwatch = new Stopwatch();
        _logger = logger;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        _stopwatch.Start();
    }

    public override void OnResultExecuted(ResultExecutedContext context)
    {
        _stopwatch.Stop();
        _logger.LogInformation($"Time took {_stopwatch.ElapsedMilliseconds}");
    }
}

. Чтобы использовать вышеупомянутый фильтр, вам нужно использовать атрибут TypeFilter для разрешения зависимостей через DI.В данном случае это ILogger<ResponseTimeAttribute>.Итак, к вашему методу действий добавьте, как показано ниже:

[TypeFilter(typeof(ResponseTimeAttribute))]
public IActionResult YourAction()
{
    return Ok(content);
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...