Библиотека Profiler для wcf + postsharp

Нам нужно добавить новую функцию профилирования в наше приложение WCF для ведения журнала времени, проведенного в приложении. Я смотрю на PostSharp для подхода к применению ведения журнала, основанного на соглашении, и мне нужен некоторый вклад в то, как на самом деле его регистрировать. Я уже создал собственный класс для ведения журнала с помощью StopWatch и могу регистрировать шаги через слои моего приложения WCF. Однако мне интересно, есть ли альтернативная библиотека, безопасная для потоков, которую я мог бы использовать для этой цели вместе с PostSharp. Я столкнулся с MiniProfiler, но, похоже, он предназначен в основном для приложений ASP.NET MVC. Любые другие рамки, которые я должен рассмотреть, или я должен просто использовать свой собственный класс? Спасибо


person jaspernygaard    schedule 11.04.2012    source источник
comment
мини-профилировщик полностью поддерживает WCF, есть даже демонстрационный проект   -  person Sam Saffron    schedule 13.04.2012


Ответы (2)


Я делал что-то подобное в прошлом, используя IClientMessageInspector, реализованный на пользовательском IEndpointBehavior. В зависимости от того, какой тип ведения журнала вы хотите, это может помочь. Пример есть по следующей ссылке

Интерфейс IClientMessageInspector

person Dynami Le Savard    schedule 11.04.2012
comment
Не совсем то, что я ищу. Например. прямо сейчас я настроил почтовую резкость для профилирования всех общедоступных методов в конкретной сборке. Я хочу знать, сколько времени каждый вызов метода проходит через слои, пока мы не вызовем базу данных. Теперь мне удалось сделать это с помощью пользовательского класса, который может выводить результат в формате xml в базу данных log4net. Просто интересно, следует ли мне рассмотреть возможность использования какой-либо структуры для этой цели вместо этого подхода «сделай сам». - person jaspernygaard; 11.04.2012

PostSharp сам по себе потокобезопасен. Аспекты, которые вы пишете, могут быть потокобезопасными, если написаны плохо, но всегда есть способ сделать их потокобезопасными.

Если вы используете OnMethodBoundaryAspect и вам нужно передать что-то из OnEntry в OnSuccess, сохраните начальное значение секундомера в OnMethodExecutionArgs.MethodExecutionTag.

person Gael Fraiteur    schedule 13.04.2012