Ich versuche, den Mini-Profiler für RavenDb in meinem ASP.NET MVC4-Projekt zum Laufen zu bringen.
Ich habe folgendes in meinem Unity-Bootstrapper:
[assembly: WebActivator.PreApplicationStartMethod(typeof(Web.App.App_Start.AppStart_Unity), "Start")]
public static class AppStart_Unity
{
public static void RegisterServices(IUnityContainer container)
{
container.RegisterInstance(DocumentStoreFactory.Create(ConfigurationManager.ConnectionStrings[0].Name));
container.RegisterType(new HierarchicalLifetimeManager(), new InjectionFactory(c => c.Resolve().OpenSession(ConfigurationManager.ConnectionStrings[0].Name)));
}
public static void Start()
{
// Erstelle den Unity-Container
IUnityContainer container = new UnityContainer();
// Registriere Dienste mit unserem Unity-Container
RegisterServices(container);
// Sag ASP.NET MVC, unseren Unity-DI-Container zu verwenden
DependencyResolver.SetResolver(new UnityServiceLocator(container));
// Verknüpfe den Profiler
var store = container.Resolve();
var documentStore = store as DocumentStore;
if (documentStore != null)
{
Raven.Client.MvcIntegration.RavenProfiler.InitializeFor(documentStore);
}
}
}
In meinem Master-Layout habe ich folgendes:
@Raven.Client.MvcIntegration.RavenProfiler.CurrentRequestSessions()
Beim ersten Start der Webanwendung sehe ich den Profiler, kein Problem.
Bei allen nachfolgenden Seitenanfragen ist der Profiler jedoch nicht sichtbar.
Wenn ich mir den Quellcode der Seite anschaue, sehe ich, dass der Div-Container vorhanden ist, aber ohne Daten gefüllt ist. Keine JavaScript-Fehler. Sehr merkwürdig. Der gerenderte HTML-Code sieht so aus:
Schließen
Beim Vergleich der Anfragen sehe ich folgende Anfragen beim ersten Laden:
http://localhost:62238/ravendb/profiling?path=yepnope.js
http://localhost:62238/ravendb/profiling?path=jquery.tmpl.min.js
http://localhost:62238/ravendb/profiling?path=ravendb-profiler-scripts.js
http://localhost:62238/ravendb/profiling?path=jquery.tmpl.min.js
http://localhost:62238/ravendb/profiling?path=ravendb-profiler-scripts.js
http://localhost:62238/ravendb/profiling?path=Templates%2Ftotals.tmpl.html
http://localhost:62238/ravendb/profiling?path=Templates%2Fravendb-profiler.tmpl.html
http://localhost:62238/ravendb/profiling?path=Templates%2Fsession-template.tmpl.html
http://localhost:62238/ravendb/profiling?path=Templates%2Frequest-details.tmpl.html
http://localhost:62238/ravendb/profiling?id%5B%5D=d3ada4e4-4bc3-4a7c-bd36-64cc8017d94a
http://localhost:62238/ravendb/profiling?path=styles.css
Bei nachfolgenden Ladevorgängen sehe ich folgende Anfragen:
http://localhost:62238/ravendb/profiling?path=yepnope.js
http://localhost:62238/ravendb/profiling?path=jquery.tmpl.min.js
http://localhost:62238/ravendb/profiling?path=ravendb-profiler-scripts.js
http://localhost:62238/ravendb/profiling?path=jquery.tmpl.min.js
http://localhost:62238/ravendb/profiling?path=ravendb-profiler-scripts.js
Merkwürdigerweise sehe ich in beiden Fällen doppelte Aufrufe von jquery.tmpl.min.js und ravendb-profiler-scripts.js.
Die ravendb-profiler-scripts.js enthält die Zeilen:
9. var load = function () {
10. if (options.id.length == 0)
11. return;
Bei den nachfolgenden Ladevorgängen ist options.id.length null. Die Templates werden dann nicht geladen und die Ergebnisse werden nicht abgerufen.
Der erste Seitenladevorgang enthält das Skript:
yepnope([{ test: window.jQuery, nope: '/ravendb/profiling?path=jquery-1.6.1.min.js' }, { test: window.jQuery && window.jQuery.fn.tmpl, nope: '/ravendb/profiling?path=jquery.tmpl.min.js' }, {load: '/ravendb/profiling?path=ravendb-profiler-scripts.js', complete: function() { jQuery(function() { RavenDBProfiler.initalize({ id:['df05238a-24a6-4a16-ad63-3b9537e9b544'], url: '/ravendb/profiling' }); }) } }]);
Die nachfolgenden Ladevorgänge enthalten:
yepnope([{ test: window.jQuery, nope: '/ravendb/profiling?path=jquery-1.6.1.min.js' }, { test: window.jQuery && window.jQuery.fn.tmpl, nope: '/ravendb/profiling?path=jquery.tmpl.min.js' }, {load: '/ravendb/profiling?path=ravendb-profiler-scripts.js', complete: function() { jQuery(function() { RavenDBProfiler.initalize({ id:[], url: '/ravendb/profiling' }); }) } }]);
Bemerken Sie das Fehlen von id-Objekten.
Ich habe auch den Mini-Profiler ausprobiert und habe versucht, von der neuesten instabilen RavenDb-Clientversion zur aktuellen stabilen Version zurückzukehren. Nichts scheint einen Unterschied zu machen.
Ist dies das erwartete Verhalten? Muss ich noch etwas anderes tun? Mache ich hier einen Fehler?
Aktualisierung
Ich habe gerade das Glimpse.Ravendb-Plugin installiert und es zeigt an:
Das Profiling wird derzeit nicht für EmbeddableDocumentStore unterstützt.
Ich benutze jedoch offensichtlich nicht den EmbeddableDocumentStore
:
public static class DocumentStoreFactory
{
public static IDocumentStore Create(string connectionStringName)
{
var documentStore = new DocumentStore { ConnectionStringName = connectionStringName };
documentStore.Initialize();
documentStore.DatabaseCommands.EnsureDatabaseExists(connectionStringName);
var catalog = new CompositionContainer(new AssemblyCatalog(typeof(Users_ByKarmaAndLocation).Assembly));
IndexCreation.CreateIndexes(catalog, documentStore.DatabaseCommands.ForDatabase(connectionStringName), documentStore.Conventions);
return documentStore;
}
}
Ich bin mir nicht sicher, ob das eine falsche Fährte ist oder nicht. Ich wollte es aber erwähnen.