Ich verwende Mini-Profiler in meinem asp.net-Web-API-Projekt und möchte die Leistung von Code verfolgen, der in einem benutzerdefinierten DelegatingHandler ausgeführt wird.
Die Aufrufe MiniProfiler.Current.Step()
in DelegatingHandler
werden nicht in den Ergebnissen angezeigt. Andere Anrufe im selben Projekt erscheinen in Ordnung.
Weitere Untersuchungen ergaben, dass MiniProfiler.Current
von HttpContext.Current
in WebRequestProfilerProvider
abgerufen wird. Und HttpContext.Current
ist null, wenn von DelegatingHandler
aufgerufen wird.
Gibt es eine bessere Möglichkeit, MiniProfiler.Current abzurufen, damit es im Handler funktioniert?
MiniProfiler Timings werden standardmäßig in HttpContext.Current
gespeichert (wie Sie festgestellt haben). Wenn Sie MiniProfiler von einer Stelle aufrufen, an der HttpContxt.Current
null ist, können die Ergebnisse nicht gespeichert werden. Die Lösung besteht darin, die Ergebnisse von woanders zu speichern (und abzurufen).
MiniProfiler bietet die Möglichkeit, den Speicherort für alle Ergebnisse zu ändern (mit MiniProfiler.Settings.Storage
). Der neue v3 MiniProfiler ( beta nugget hier ) bietet die Möglichkeit, für jede Anfrage verschiedene IStorage
zu konfigurieren, und mit MultiStorageProvider
mehrere Orte zu bestimmen, an denen die Ergebnisse liegen können gespeichert und abgerufen. Sie können ein Beispiel dafür in der Sample.Mvc sehen Projekt auf GitHub.
In Ihrem Fall könnte der beste Ansatz darin bestehen, ein MultiStorageProvider
für Ihr globales MiniProfiler.Settings.Storage
festzulegen, das zuerst von HttpRuntimeCacheStorage
speichert / abruft und dann danach ein anderes IStorage
verwendet, auf das von% zugegriffen werden kann. Code%. Setzen Sie in DelegatingHandler
dann DelegatingHandler
so, dass nur die zweite Speicheroption verwendet wird, die Sie in MiniProfiler.Current.Storage
festgelegt haben (da es sinnlos ist, den HttpCache zu speichern). In diesem Fall werden Profile von MultiStorageProvider
in Ihrer zweiten Speicheroption gespeichert und für die Anzeige mit Ihren anderen Ergebnissen abgerufen (da DelegatingHandler
MultiStorageProvider
ergibt sich aus dem ersten Platz, den es bekommen kann - wenn es das Ergebnis in HttpCache nicht findet , es wird zur zweiten Option gehen.
Hinweis: Mehrere Speicheroptionen sind in diesem Fall hilfreich, können sich jedoch negativ auf die Leistung beim Abrufen von Profilen auswirken.
Tags und Links asp.net-web-api mvc-mini-profiler