2012-05-25 2 views
4

Чтобы выполнить некоторый бенчмаркинг по WCF, мне нужно иметь возможность получить размер обмененных данных (со всеми заголовками (даже TCP)/сжатие/...).WCF: Проверьте обменный размер

Это более крупный бенчмаркинг (который также пытается различить привязку, кодирование, ...), поэтому мне нужно сделать это программно и НЕ через что-то вроде wirehark.

Есть ли какой-нибудь крючок для этого?

Все каналы/привязки/кодеры создаются программно для автоматизации некоторых тестов.

Я нашел несколько способов (http://devlicio.us/blogs/derik_whittaker/archive/2011/02/03/how-to-intercept-a-wcf-message-to-track-message-size.aspx), но я не уверен, что он будет работать с нетекстовыми данными. Или http://zamd.net/2008/08/15/calculating-wcf-message-size/, но я не вижу, как запустить его (и не уверен, что это работает с моим пользовательских кодеров

+1

вы, кажется, уже есть ответ. Используя некоторые действия с конечными точками, вы можете найти размер, указанный в ссылках, которые вы предоставили. С другой стороны, я считаю, что использование wirehark по-прежнему является лучшим вариантом при наблюдении за количеством сообщений, поскольку вы можете наблюдать за накладными расходами, связанными с протоколом. Я чувствую, что вы закончите писать свой собственный скрипач или проводник. – daryal

+0

Тесты будут проводиться на тех же рабочих станциях, поэтому я думаю, что wirehark их не будет читать. Кроме того, мне действительно нужно, чтобы те тесты были автоматизированы. – J4N

+2

Fiddler считывает значения, но для автоматизации вы в конечном итоге будете писать другую программу для прослушивания сетевых пакетов. – daryal

ответ

2

Написать MessageInspector. Это даст вам событие для всех сообщений. http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.clientruntime.messageinspectors.aspx

Вы можете быть в состоянии использовать счетчики производительности WMI http://msdn.microsoft.com/en-us/library/ms735098.aspx

+0

Привет, спасибо за ответ. Является ли MessageInspector учет всех данных уровня? (Например, http, ...)? Если да, то что мне нужно! – J4N

+0

«Внедрить AfterReceiveReply для проверки или изменения ответного сообщения после его получения клиентом, но до его десериализации в объекты, которые возвращаются клиентскому приложению». Таким образом, вы получаете фактическое сообщение, но не обертывание протоколов нижнего уровня, я думаю. – IvoTops

0

У вас есть 2 варианта:.

  • использовать расширяемость WCF это, как правило, будет больше работы, и вам нужно будет рассмотреть различные ФОС ситуации
  • использование из группы раствора, как Wireshark

Я не уверен, почему вы предпочитаете бывший. - Я рекомендую попробовать Wireshark, я уверен, что это может быть автоматизирована тоже. Если вы хотите сделать это внутри wcf, вы ld реализует настраиваемый кодер сообщений для калибровки размера байтов, которые идут на провод. это должен быть общий кодер, который обертывает в него любой другой кодировщик. здесь an example для общего кодера. обратите внимание, что подход кодера учитывает только размер сообщения, но не кадрирует его сверху (например, заголовки HTTP). Вот почему я думаю, что wirehark лучше для вашего дела.

Смежные вопросы