Как измерить время, прошедшее при вызове веб-службы WCF? - PullRequest
1 голос
/ 24 марта 2010

Мы хотим отслеживать время, затраченное на вызов веб-службы между клиентом и сервером. Это время не должно включать время, затраченное сервером на обработку запроса. Идея состоит в том, что мы хотим видеть, сколько времени теряется при обращении к веб-службе из-за фактической передачи по сети.

WCF уже предлагает что-то в этом направлении?

Конечно, я мог бы просто добавить таймер на клиенте и вычесть время обработки сервера, но это было бы не очень элегантно.

Ответы [ 2 ]

3 голосов
/ 24 марта 2010

WCF имеет множество счетчиков производительности - см. Документы MSDN по этой теме или ознакомьтесь с Как использовать счетчики производительности WCF для получения отчета о том, как их использовать.

Другой вариант - включить трассировка WCF - вы получите довольно подробные отчеты о том, как ваши сообщения проходили через систему, включая временные метки. Основываясь на этих битах, вы сможете определить время, проведенное в сети и т. Д. Существует довольно приятный инструмент WCF Trace Viewer , который позволяет довольно легко проверять эти файлы трассировки.

Другой вариант - использовать заголовки, например, Поля DateTime: добавьте первый заголовок («ClientOut») на клиенте так же, как отправляется сообщение, и добавьте еще (например, «ServerIn», «ServerOut») на сервере, а затем снова последний на клиенте ( "ClientBackIn"). Если вы запишите фактическую дату / время, вы сможете просмотреть эти заголовки и увидеть некоторую информацию о том, сколько времени затрачивается на поездку между клиентом и сервером. Вы можете создать расширение инспектора сообщений для WCF, чтобы сделать что-то вроде этого.

0 голосов
/ 24 марта 2010

По существу, если оценка достаточно хорошая, то теста Ping (ICMP Echo) должно быть достаточно, чтобы определить время прохождения пакетов данных между клиентом и сервером в обоих направлениях.

Но если вам нужны надежные данные, вам придется:

  1. Убедитесь, что клиент и сервер синхронизированы. Это может быть достигнуто путем синхронизации обеих сторон с сервером уровня 1 или слоя 2 NTP / SNTP (см. RFC 958 , 1305 , 1361 ) или реализует какой-либо другой протокол синхронизации.
  2. Отметка времени каждого «сообщения» (вызова метода) при передаче и приеме.
  3. Рассчитайте время прохождения для этого сообщения и перечислите его.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...