我认为我正确地设置了ServiceStack的分析器,但也许我不是。我只是试图掌握基础知识。
我到目前为止安装分析的唯一步骤 -
在Global.asax.cs
:
private void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.IsLocal)
{
Profiler.Start();
}
}
private void Application_EndRequest(object sender, EventArgs e)
{
Profiler.Stop();
}
在我的_SiteLayout.cshtml页面中,在呈现任何其他javascript文件之前,我尝试渲染:
<body>
<!-- ... -->
@Html.Raw(HttpUtility.HtmlDecode(Profiler.RenderIncludes().ToString()))
<!-- ...other scripts... -->
</body>
我收到的错误:
[NullReferenceException:对象引用未设置为对象的实例。]
ServiceStack.MiniProfiler.UI.MiniProfilerHandler.RenderIncludes(Profiler profiler,Nullable
1 position, Nullable
1 showTrivial,Nullable1 showTimeWithChildren, Nullable
1 maxTracesToShow,Boolean xhtml,Nullable`1 showControls,String path)+293ServiceStack.MiniProfiler.Profiler.RenderIncludes(Nullable
1 position, Nullable
1 showTrivial,Nullable1 showTimeWithChildren, Nullable
1 maxTracesToShow,Boolean xhtml,Nullable`1 showControls)+99...
鉴于我正在努力完成基础知识,我不确定此时什么可能是null。在启动分析器之前是否需要某种额外的设置?这可能是路由问题吗?
答案 0 :(得分:1)
这种情况下的解决方案似乎只是使用标准的MiniProfiler库而不是ServiceStack附带的库。
在Nuget包安装程序中,我运行了:
Install-Package MiniProfiler
Install-Package MiniProfiler.MVC4
我通过以下方式修改了global.asax
:
private void Application_BeginRequest(object sender, EventArgs e)
{
MiniProfiler.Start();
}
private void Application_AuthenticateRequest(object sender, EventArgs e)
{
//stops the profiler if the user isn't on the tech team
var currentUser = ClaimsPrincipal.Current.Identity as ClaimsIdentity;
if (!Request.IsLocal && !currentUser.GetGlobalRoles().Contains(Constant.Roles.TechTeam))
{
MiniProfiler.Stop(discardResults:true);
}
}
private void Application_EndRequest(object sender, EventArgs e)
{
MiniProfiler.Stop();
}
然后,在我的Layout.cshtml
文件中,在body标记结束之前,我放置了:
@MiniProfiler.RenderIncludes()
</body>
</html>
在返回我的OrmLiteConnectionFactory的代码部分中,我使用以下代码:
private OrmLiteConnectionFactory claimFactory = new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString(), true, SqlServerDialect.Provider)
{
ConnectionFilter = x => new ProfiledDbConnection(x as System.Data.SqlClient.SqlConnection, MiniProfiler.Current)
};
这似乎可以很好地分析SQL和连接。