wcf - Aplicación web de perfiles MvcMiniProfiler y capas inferiores
mvc-mini-profiler (2)
Ese es un método, pero para obtener la referencia a las bibliotecas, debería agregar referencias en las capas inferiores para MvcMiniProfiler de todos modos.
Lo que hice en esta misma situación es aprovechar el punto de acceso global que proporciona MiniProfiler como singleton. Entonces, acabo de agregar la referencia en los niveles inferiores (eliminé las cosas relacionadas con MVC, como las vistas) y acabo de utilizar MiniProfiler.Current como si estuviera en las capas superiores.
Funciona a las mil maravillas. :)
Tengo MiniProfiler configurado y trabajando en mi aplicación ASP.NET MVC. Mis controladores hacen llamadas a través de WCF a un BLL que a su vez habla a la base de datos. Me gustaría ver el perfil del servicio WCF junto con el perfil existente que veo desde la aplicación web. ¿Se trata de hacer de MiniProfiler un parámetro en todas las llamadas de servicio?
En un lanzamiento reciente de MvcMiniProfiler, agregaron soporte WCF (versión 1.8 o superior). Este es un proceso de 3 pasos para que esto funcione:
Agregar referencias
Primero agrega referencias a MvcMiniprofiler y MvcMiniProfiler.WCF en tu capa de interfaz de usuario y capa de WCF a través de nuget (o descarga la fuente y compila la tuya).
Configurar el host WCF
En segundo lugar, dentro del web.config del host del servicio, debe agregar el miniprofiler como comportamiento del punto final. Todas las secciones de configuración pertenecen a "configuration / system.serviceModel".
<endpointBehaviors>
<behavior name="miniProfilerBehavior">
<wcfMiniProfilerBehavior />
</behavior>
</endpointBehaviors>
A continuación, agregue la extensión de comportamiento (tenga en cuenta que el número de versión debe coincidir con su versión de MvcMiniProfiler.WCF):
<extensions>
<behaviorExtensions>
<add name="wcfMiniProfilerBehavior" type="MvcMiniProfiler.Wcf.WcfMiniProfilerBehavior, MvcMiniProfiler.Wcf, Version=1.8.0.0, Culture=neutral" />
</behaviorExtensions>
</extensions>
Luego configure los puntos finales para usar el comportamiento del generador de perfiles que configuró:
<services>
<service behaviorConfiguration="BaseBehavior" name="BSI.Something">
<endpoint address="" behaviorConfiguration="miniProfilerBehavior" binding="basicHttpBinding" bindingConfiguration="http" contract="BSI.ISomething"/>
</service>
</services>
Depende de su configuración, pero tuve que agregar una configuración web.config más para ejecutar todos los módulos administrados para todas las solicitudes. Esta configuración se encuentra en la sección de "configuración" de la raíz:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Configurar WCF Client
Por último, configure el cliente wcf para "encender" el profiler de mvc haciendo lo mismo anteriormente.
Agrega la extensión:
<extensions>
<behaviorExtensions>
<add name="wcfMiniProfilerBehavior" type="MvcMiniProfiler.Wcf.WcfMiniProfilerBehavior, MvcMiniProfiler.Wcf, Version=1.8.0.0, Culture=neutral" />
</behaviorExtensions>
</extensions>
Agrega un comportamiento:
<behaviors>
<endpointBehaviors>
<behavior name="wcfMiniProfilerBehavior">
<wcfMiniProfilerBehavior />
</behavior>
</endpointBehaviors>
</behaviors>
Configure los puntos finales para usar ese comportamiento:
<client>
<endpoint address="http://something/Something.svc" behaviorConfiguration="wcfMiniProfilerBehavior"
binding="BasicHttpBinding" bindingConfiguration="BasicHttpBinding_HTTP"
contract="BSL.ISomething" name="BasicHttpBinding_ISomething" />
</client>
¡Y tu estas listo!
Nota al margen : ¿Cómo funciona realmente el MvcMiniProfiler sobre WCF? Básicamente, el comportamiento del cliente configura un encabezado SOAP que le dice al host wcf que encienda el generador de perfiles. Pasa el encabezado a lo largo del cual es leído por el comportamiento del punto final en el lado del host WCF. A continuación, activa el generador de perfiles en el host. Por último, cuando el servidor WCF está respondiendo al cliente, incluye toda la bondad del generador de perfiles en el encabezado de respuesta SOAP, que a su vez es leído por el cliente WCF. Bastante ingenioso