Ответ 1
В недавнем выпуске 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. Довольно изобретательный.