2013-07-05 61 views
9

我在我的asp.net Web API項目中使用mini profiler,並且想要跟蹤在自定義DelegatingHandler中運行的一些代碼的性能。當從System.Net.Http.DelegatingHandler調用時MiniProfiler.Current爲null

DelegatingHandler內部的電話MiniProfiler.Current.Step()未顯示在結果中。同一個項目中的其他呼叫顯示正常。

進一步的調查顯示,MiniProfiler.CurrentHttpContext.Current中檢索到WebRequestProfilerProvider。當從DelegatingHandler調用時,HttpContext.Current爲空。

有沒有更好的方式來檢索MiniProfiler.Current,以便它在處理程序內工作?

+1

也許這個回答你的問題? [MvcMiniProfiler是否需要Web應用程序工作,還是可以在純庫中使用,例如在單元測試中?] [1] [1]:http://stackoverflow.com/questions/8526609/does-mvcminiprofiler-require-a-web-application-to-work-or-can-it-be-used-in- PUR –

回答

3

MiniProfiler時間默認情況下存儲在HttpContext.Current(如您發現的)。因此,如果您從HttpContxt.Current爲空的地方調用MiniProfiler,則結果無法保存。解決方法是從其他地方保存(並檢索)結果。

MiniProfiler提供了更改所有結果應該存儲和檢索的位置的選項選項(使用MiniProfiler.Settings.Storage)。 new v3 MiniProfilerbeta nuget here)提供了爲每個請求配置不同的IStorage以及使用MultiStorageProvider指定可以存儲和檢索結果的多個位置的選項。你可以在github上的Sample.Mvc項目中看到這個例子。

在你的情況,最好的辦法可能是設置一個MultiStorageProvider爲您的全球MiniProfiler.Settings.Storage會先救/從HttpRuntimeCacheStorage檢索,然後再把會用一些其他IStorage是從DelegatingHandler訪問。然後在DelegatingHandler中,將MiniProfiler.Current.Storage設置爲僅使用您在MultiStorageProvider中設置的第二個存儲選項(因爲嘗試保存HttpCache毫無意義)。在此情況下,DelegatingHandler中的配置文件將被保存到您的第二個存儲選項中,並且將與其他結果一起檢索以供查看(因爲MultiStorageProvider將從Load得到第一個結果,如果它沒有找到結果在HttpCache,它會去第二個選項

注 - 有多個存儲選項是在這種情況下是有用的,但它可以對中檢索配置文件的性能產生負面影響

相關問題