Могу ли я перехватить после того, как ответ был отправлен клиенту в IHttpModule - PullRequest
3 голосов
/ 06 марта 2012

У меня есть собственный IHttpModule, который используется для регистрации всех HTTP-запросов и ответов, и в настоящее время он работает очень хорошо, но я бы хотел его расширить, чтобы я мог определить, сколько времени на самом деле занимает ответ.

Ответ регистрируется в событии HttpApplication.EndRequest, но это событие срабатывает до того, как запрос фактически отправляется веб-клиенту.Хотя это позволяет мне определить, сколько времени потребуется серверу для обработки ответа, я также хотел бы узнать, сколько времени фактически потребовалось клиенту для получения ответа.

Есть ли событие или какой-то другой механизм, который позволит мне перехватить после того, как клиент закончил получать ответ?

Ответы [ 3 ]

1 голос
/ 22 мая 2013

Так что для этого потребуется код на стороне клиента. Но не совсем понятно, что вы хотите измерить. Время от самого маленького до самого большого может составлять

  1. время внутри серверного приложения - измеряется кодом, который у вас уже есть.
    • Ваш код может установить start либо из «Now ()», когда он начинается, либо с использованием объектов HTTP. При первом обращении к сайту будет видно большое различие между этими временами запуска, в противном случае они должны быть практически идентичны.
  2. время на веб-сайте сервера - я полагаю, это уже измеряется большинством хостинговых служб, таких как IIS.
  3. серверный компьютер - я полагаю, что это то, что относится к «мо». Вам понадобится какой-то внешний мониторинг на сервере, аля WireShark.
  4. клиентский компьютер - опять же, вам потребуется какой-то внешний мониторинг на клиентском компьютере. Это будет труднее всего получить, но я думаю, что это действительно то, что вы просите.
  5. клиентское приложение - это то, что вы можете измерить с помощью JavaScript.

Если это не «первый вызов» (см. Медленная загрузка первой страницы на сайте asp.net или Приложение ASP.NET на IIS7 - очень медленный запуск после iisreset ), я Полагайте, что все это время будет настолько близко, что вместо этого вы сможете использовать «достаточно хороший» подход.

Если вы должны иметь меру времени звонка , то вы застряли в плохом положении. Но если вам просто нужны более качественные цифры, просто продолжайте измерять 1. (время подачи заявки) с тем, что у вас уже есть, и обязательно измеряйте размер запроса и ответа.

Затем установите базовую линию для настройки этого времени путем тестирования на различных целевых клиентских компьютерах.

  • Измерение времени пинга с клиента на ваш сервер.
  • Измерение времени передачи умеренно большого контента - как загрузка, так и загрузка
  • Найдите числа, чтобы получить среднюю корректировку

Вы должны получить следующую формулу:

[AdjustedTime] = [PingTime] + [ServerTime]
+ ([UploadSpeed] * [RequestSize])
+ ([DownloadSpeed] * [ResponseSize]);

Это будет ожидаемое время ответа клиента.

0 голосов
/ 11 марта 2012

другим способом может быть подключение (пример: служба Windows для записи времени отклика в базу данных) в ваш веб-сервер (IIS) и отслеживание этих событий. Если вы хотите проанализировать время, клиент должен получить ваш контент.

но я думаю, что iis уже в состоянии сделать это.

это зависит от того, что вы хотите сделать.

0 голосов
/ 11 марта 2012

да, вы можете обработать HttpApplication.EndRequest

...