Нам нужно добавить новую функцию профилирования в наше приложение WCF для ведения журнала времени, проведенного в приложении. Я смотрю на PostSharp для подхода к применению ведения журнала, основанного на соглашении, и мне нужен некоторый вклад в то, как на самом деле его регистрировать. Я уже создал собственный класс для ведения журнала с помощью StopWatch и могу регистрировать шаги через слои моего приложения WCF. Однако мне интересно, есть ли альтернативная библиотека, безопасная для потоков, которую я мог бы использовать для этой цели вместе с PostSharp. Я столкнулся с MiniProfiler, но, похоже, он предназначен в основном для приложений ASP.NET MVC. Любые другие рамки, которые я должен рассмотреть, или я должен просто использовать свой собственный класс? Спасибо
Библиотека Profiler для wcf + postsharp
comment
мини-профилировщик полностью поддерживает WCF, есть даже демонстрационный проект
- person Sam Saffron   schedule 13.04.2012
Ответы (2)
Я делал что-то подобное в прошлом, используя IClientMessageInspector
, реализованный на пользовательском IEndpointBehavior
. В зависимости от того, какой тип ведения журнала вы хотите, это может помочь. Пример есть по следующей ссылке
Интерфейс IClientMessageInspector
person
Dynami Le Savard
schedule
11.04.2012
Не совсем то, что я ищу. Например. прямо сейчас я настроил почтовую резкость для профилирования всех общедоступных методов в конкретной сборке. Я хочу знать, сколько времени каждый вызов метода проходит через слои, пока мы не вызовем базу данных. Теперь мне удалось сделать это с помощью пользовательского класса, который может выводить результат в формате xml в базу данных log4net. Просто интересно, следует ли мне рассмотреть возможность использования какой-либо структуры для этой цели вместо этого подхода «сделай сам».
- person jaspernygaard; 11.04.2012
PostSharp сам по себе потокобезопасен. Аспекты, которые вы пишете, могут быть потокобезопасными, если написаны плохо, но всегда есть способ сделать их потокобезопасными.
Если вы используете OnMethodBoundaryAspect и вам нужно передать что-то из OnEntry в OnSuccess, сохраните начальное значение секундомера в OnMethodExecutionArgs.MethodExecutionTag.
person
Gael Fraiteur
schedule
13.04.2012