14

ASP.NET MVC アプリで MiniProfiler をセットアップして動作させています。私のコントローラーは、WCF を介して BLL を呼び出し、BLL はデータベースと通信します。Web アプリから見た既存のプロファイリングと一緒に、WCF サービスからのプロファイリングを見たいと思います。すべてのサービス呼び出しで MiniProfiler をパラメーターにする場合ですか?

4

2 に答える 2

21

MvcMiniProfiler の最近のリリースでは、WCF サポート (バージョン 1.8 以降) が追加されました。これは、これを機能させるための 3 ステップのプロセスです。

参照を追加

最初に、nuget を介して UI レイヤーと WCF レイヤーに MvcMiniprofiler と MvcMiniProfiler.WCF への参照を追加します (または、ソースをダウンロードして独自にコンパイルします)。

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 設定をもう 1 つ追加する必要がありました。この構成は、ルートの「構成」セクションにあります。

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

WCF クライアントのセットアップ

最後に、上記とほとんど同じことを行って、mvc プロファイラーを「オン」にするように wcf クライアントをセットアップします。

拡張子を追加します。

<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 でどのように機能しますか? 基本的に、クライアントの動作は、wcf ホストにプロファイラーをオンにするように指示する SOAP ヘッダーを設定します。WCF ホスト側のエンドポイント動作によって読み取られるヘッダーを渡します。次に、ホストでプロファイラーをオンにします。最後に、WCF ホストがクライアントに返信するとき、すべてのプロファイラーの利点が SOAP 応答ヘッダーに詰め込まれ、WCF クライアントによって読み取られます。かなり独創的です。

于 2011-09-26T13:33:01.427 に答える
0

これは 1 つの方法ですが、ライブラリへの参照を取得するには、とにかく MvcMiniProfiler の下位層に参照を追加する必要があります。

このまったく同じ状況で私が行ったことは、MiniProfiler がシングルトンとして提供するグローバル アクセス ポイントを利用することです。そのため、下位レベルに参照を追加し (ビューなどの MVC に関連するものを削除)、上位レイヤーにいるかのように MiniProfiler.Current を使用しました。

それは魅力のように機能します。:)

于 2011-09-26T02:49:46.267 に答える