MvcMiniProfiler分析Web应用程序和较低层

时间:2011-09-23 13:51:50

标签: wcf mvc-mini-profiler

我在我的ASP.NET MVC应用程序中设置并使用MiniProfiler。我的控制器通过WCF调用BLL,然后BLL与数据库进行通信。我希望看到WCF服务的分析以及我从Web应用程序中看到的现有分析。是否将MiniProfiler作为所有服务调用中的参数?

2 个答案:

答案 0 :(得分:21)

在最近发布的MvcMiniProfiler中,他们添加了WCF支持(版本1.8或更高版本)。这是实现这一目标的三步过程:

添加参考文献

首先通过nuget在UI层和WCF层添加对MvcMiniprofiler和MvcMiniProfiler.WCF的引用(或者下载源代码并编译自己的代码)。

设置WCF主机

其次,在服务主机的web.config中,您必须将miniprofiler添加为端点行为。所有配置部分都属于“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响应头中,而SOAP响应头又由WCF客户端读取。非常巧妙。

答案 1 :(得分:0)

这是一种方法,但是为了获得对库的引用,无论如何都必须在MvcMiniProfiler的较低层中添加引用。

我在同样的情况下所做的是利用MiniProfiler提供的全局访问点作为单例。所以,我刚刚添加了较低级别的引用(删除了相对于MVC的内容,例如视图),并且只使用了MiniProfiler.Current,就像我在上层一样。

它就像一个魅力。 :)