ASP.NET MVC アプリで MiniProfiler をセットアップして動作させています。私のコントローラーは、WCF を介して BLL を呼び出し、BLL はデータベースと通信します。Web アプリから見た既存のプロファイリングと一緒に、WCF サービスからのプロファイリングを見たいと思います。すべてのサービス呼び出しで MiniProfiler をパラメーターにする場合ですか?
2 に答える
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 クライアントによって読み取られます。かなり独創的です。
これは 1 つの方法ですが、ライブラリへの参照を取得するには、とにかく MvcMiniProfiler の下位層に参照を追加する必要があります。
このまったく同じ状況で私が行ったことは、MiniProfiler がシングルトンとして提供するグローバル アクセス ポイントを利用することです。そのため、下位レベルに参照を追加し (ビューなどの MVC に関連するものを削除)、上位レイヤーにいるかのように MiniProfiler.Current を使用しました。
それは魅力のように機能します。:)