MvcMiniProfiler для профилирования веб-приложений и нижних уровней - PullRequest
14 голосов
/ 23 сентября 2011

В моем приложении ASP.NET MVC настроено и работает MiniProfiler. Мои контроллеры делают вызовы через WCF на BLL, который, в свою очередь, обращается к базе данных. Я хотел бы видеть профилирование из службы WCF наряду с существующим профилированием, которое я вижу в веб-приложении. Это случай, когда MiniProfiler используется в качестве параметра во всех вызовах службы?

Ответы [ 2 ]

21 голосов
/ 26 сентября 2011

В недавнем выпуске MvcMiniProfiler была добавлена ​​поддержка WCF (версия 1.8 или выше).Этот процесс состоит из трех этапов:

Добавить ссылки

Сначала добавьте ссылки на MvcMiniprofiler и MvcMiniProfiler.WCF на уровне пользовательского интерфейса и на уровне WCF через nuget (или загрузите источник исоставить свой собственный).

Настройка хоста WCF

Во-вторых, в файле web.config хоста службы вы должны добавить минипрофиля в качестве поведения конечной точки.Все разделы конфигурации находятся в "configuration / system.serviceModel".

<endpointBehaviors>
   <behavior name="miniProfilerBehavior">
      <wcfMiniProfilerBehavior />
   </behavior>
</endpointBehaviors>

Затем добавьте расширение поведения (обратите внимание, что номер версии должен соответствовать вашей версии MvcMiniProfiler.WCF):

<extensions>
    <behaviorExtensions>
      <add name="wcfMiniProfilerBehavior" type="MvcMiniProfiler.Wcf.WcfMiniProfilerBehavior, MvcMiniProfiler.Wcf, Version=1.8.0.0, Culture=neutral" />
    </behaviorExtensions>
 </extensions>

Затем настройте конечные точки для использования настроенного вами профилировщика:

<services>
  <service behaviorConfiguration="BaseBehavior" name="BSI.Something">
    <endpoint address="" behaviorConfiguration="miniProfilerBehavior" binding="basicHttpBinding" bindingConfiguration="http" contract="BSI.ISomething"/>
  </service>
 </services>

Зависит от ваших настроек, но мне пришлось добавить еще один параметр web.config для запуска всех управляемых модулей для всех запросов.Этот конфиг находится в корневом разделе «конфигурации»:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

Настройка клиента WCF

Наконец, настройте клиент wcf для «включения» профилировщика mvc, выполнив то же самое выше.

Добавьте расширение:

<extensions>
   <behaviorExtensions>
      <add name="wcfMiniProfilerBehavior" type="MvcMiniProfiler.Wcf.WcfMiniProfilerBehavior, MvcMiniProfiler.Wcf, Version=1.8.0.0, Culture=neutral" />
   </behaviorExtensions>
</extensions>

Добавьте поведение:

<behaviors>
  <endpointBehaviors>
     <behavior name="wcfMiniProfilerBehavior">
        <wcfMiniProfilerBehavior />
     </behavior>
  </endpointBehaviors>
</behaviors>

Настройте конечные точки для использования этого поведения:

<client>
   <endpoint address="http://something/Something.svc" behaviorConfiguration="wcfMiniProfilerBehavior"
      binding="BasicHttpBinding" bindingConfiguration="BasicHttpBinding_HTTP"
      contract="BSL.ISomething" name="BasicHttpBinding_ISomething" />
</client>

ИВы сделали!

Примечание: Как MvcMiniProfiler на самом деле работает над WCF?В основном поведение клиента устанавливает заголовок SOAP, который сообщает хосту wcf включить профилировщик.Он передает тот заголовок, по которому читается поведение конечной точки на стороне хоста WCF.Затем он включает профилировщик на хосте.Наконец, когда узел WCF отвечает клиенту, он добавляет все достоинства профилировщика в заголовок ответа SOAP, который, в свою очередь, читается клиентом WCF.Довольно гениально.

0 голосов
/ 26 сентября 2011

Это один из методов, но для того, чтобы получить ссылку на библиотеки, вам все равно нужно добавить ссылки на нижние уровни для MvcMiniProfiler.

Что я сделал в этой самой ситуации, так это воспользовался преимуществомглобальная точка доступа, которую MiniProfiler предоставляет как одиночную.Итак, я просто добавил ссылку на нижних уровнях (удалил материал, относящийся к MVC, например, представления) и просто использовал MiniProfiler.Current, как если бы я был на верхних уровнях.

Это работает как шарм,:)

...