我相信mvc mini profiler有点'上帝送'
我已将其合并到一个针对Azure平台的新MVC项目中.我的问题是 - 如何处理跨服务器(角色实例)障碍的分析?
这有可能吗?
我在Web表单应用程序中有一个现有的数据库连接功能,我想与迷你探查器集成.我在应用程序上安装并运行了迷你探查器,但我似乎无法正确连接数据库部分.下面是我们连接到db的代码的一部分.
public override IEnumerable<IDataRecord> Execute()
{
using( SqlConnection conn = new SqlConnection( ConnectionString ) ) {
using( SqlCommand command = new SqlCommand( CommandText, conn ) ) {
command.CommandType = SQLCommandType;
foreach( SqlParameter p in ParamsToAdd ) {
command.Parameters.Add( p );
}
conn.Open();
SqlDataReader rdr;
try {
rdr = command.ExecuteReader();
} catch( Exception ex ) {
//log error
}
using( rdr ) {
while( rdr.Read() ) {
yield return (IDataRecord)rdr;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样轻松地绕过ExecuteReader():
using( MiniProfiler.Current.Step( command.CommandText …Run Code Online (Sandbox Code Playgroud) 我的web.config文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="500" redirect="~/Content/ErrorPages/500.aspx" />
<error statusCode="404" redirect="~/Content/ErrorPages/404.aspx" />
</customErrors>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
</httpModules>
</system.web>
<rewriter configSource="Config\URLRewrites.config" />
<appSettings configSource="Config\Settings.config" />
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/Content/ErrorPages/404.aspx" responseMode="ExecuteURL" />
<error statusCode="500" path="/Content/ErrorPages/500.aspx" responseMode="ExecuteURL" />
</httpErrors>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRewriter" />
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" …Run Code Online (Sandbox Code Playgroud) 有时候使用miniprofiler时,只有一些你不关心的请求.在我的情况下,我不太关心信号器,umbraco ping,以及当我想知道用户是否闲置时提出的一些请求.
为了避免miniprofiler在这些类型的请求中使用能量(并提供结果),我将以下代码添加到我的global.asax.cs文件中:
protected void Application_BeginRequest()
{
if (
(Request.IsLocal || Request.UserHostAddress == "37.49.143.197")
&& !(Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
)
{
MiniProfiler.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
看到我仍然收到包含给定字符串的URL的结果,我稍后在应用程序生命周期中进行了此检查,试图消除我可以看到的不必要的结果.
protected void Application_ProcessRequest()
{
if (Request.RawUrl.Contains("/signalr/")
|| Request.RawUrl.Contains("/idle/verify")
|| Request.RawUrl.Contains("/idle/interaction")
|| Request.RawUrl.Contains("/umbraco/ping")
)
{
MiniProfiler.Stop(discardResults: true);
}
}
Run Code Online (Sandbox Code Playgroud)
但即使我已经这样做了,我仍然收到了不想要的结果.有谁知道这是怎么回事,我在这里做错了什么?
应该注意的是,因为我使用Umbraco作为我的基础,我正在使用MiniProfiler 2.1.0并且我开始我的Global.asax.cs文件,如下所示:
public class MvcApplication : UmbracoApplication
{
protected override void OnApplicationStarted(object sender, EventArgs e)
{
// Setup profiler for Controllers via a Global ActionFilter
GlobalFilters.Filters.Add(new ProfilingActionFilter()); …Run Code Online (Sandbox Code Playgroud) 我似乎无法从MiniProfiler获得任何结果。
我可以看到 XHR POST 返回/mini-profiler-resources/results404。chrome 请求检查器为我提供了一个标准服务器 404 页面。
对同一 URL 的 GET 也会返回 404,但有一条消息说“没有找到指定 id 的结果”(我确实在查询字符串中添加了 id)。
当我查看/mini-profiler-resources/results-index它时,它只是给了我一个空表,其中包含字段标题 - 名称、开始、sql、持续时间等。
我已经尝试了一些事情 - 详细信息如下 - 在这个阶段我不知道下一步可以尝试什么。任何调试此问题的指针或建议将不胜感激。
MVC4 也适用于 MVC5。这个项目就是哪个。
protected void Application_Start()
{
MiniProfilerEF6.Initialize();
MiniProfiler.Settings.Results_List_Authorize = IsUserAllowedToSeeMiniProfilerUI;
MiniProfiler.Settings.MaxJsonResponseSize = int.MaxValue;
Database.SetInitializer<ApplicationDbContext>(null);
GlobalFilters.Filters.Add(new ProfilingActionFilter());
var copy = ViewEngines.Engines.ToList();
ViewEngines.Engines.Clear();
foreach (var item in copy)
{
ViewEngines.Engines.Add(new ProfilingViewEngine(item));
}
}
protected void Application_BeginRequest(Object source, EventArgs e)
{
if (Request.IsLocal) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个模块,将包含有用信息的注释附加到Linq2Entities实体框架发出的每个SQL查询中DbContext(该信息将用于调试).
使用Linq2Sql,我之前通过扩展MvcMiniProfiler ProfiledDbCommand命令类来完成此操作.但是,我无法使用相同的方法来使用EF/DbContext.我正在扩展EFProfiledDbCommand,但这不起作用.实际上,即使直接使用EFProfiledDbCommand也行不通:我得到了错误
无法确定"MvcMiniProfiler.Data.EFProfiledDbConnection"类型的连接的提供者名称.
任何人都可以为我当前的解决方案提供解决方法或解决此问题的替代方法吗?
我正在尝试将MvcMiniProfiler集成到我的asp.net mvc +实体framewok项目中.第一次Web请求时一切正常,但是在其他请求中给出了异常.
我的项目是
MVC 3
实体框架4.1(DatabaseFirst + POCO生成器DbContext)
MvcMiniProfiler.dll 1.9.0.0
MvcMiniProfiler.EntityFramework.dll 1.9.1.0
我从Nu-Get安装MvcMiniProfiler
下面添加到global.asax
protected void Application_BeginRequest()
{
if (Request.IsLocal)
{
MvcMiniProfiler.MiniProfiler.Start();
MiniProfilerEF.Initialize();
}
}
Run Code Online (Sandbox Code Playgroud)
下面添加到web.config
<system.data>
<DbProviderFactories>
<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
<add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.8.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外
System.InvalidCastException was unhandled by user code
Message=Unable to cast object of type 'MvcMiniProfiler.Data.EFProfiledDbConnection' to type 'System.Data.SqlClient.SqlConnection'.
Source=System.Data
StackTrace:
at System.Data.SqlClient.SqlCommand.set_DbConnection(DbConnection value)
at System.Data.Common.DbCommand.set_Connection(DbConnection value)
at MvcMiniProfiler.Data.ProfiledDbCommand.set_DbConnection(DbConnection value) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line 118
at System.Data.Common.DbCommand.set_Connection(DbConnection value)
at System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand …Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework 5,Code首先针对SQL 2005数据库.我有一个存储库,有一个执行存储过程的方法 - 该方法如下所示;
public IEnumerable<PossibleDuplicateCustomer> GetPossibleDuplicates(Customer customer)
{
return DbContext.Database.SqlQuery<PossibleDuplicateCustomer>(
"EXEC SearchPotentialDuplicates @CustomerId = {0}, @FirstName = {1}, @LastName = {2}, @dob = {3}",
customer.CustomerId,
customer.CustomerFirstName,
customer.CustomerLastName,
customer.Dob);
}
Run Code Online (Sandbox Code Playgroud)
我尝试的另一个变种是;
public IEnumerable<PossibleDuplicateCustomer> GetPossibleDuplicates(Customer customer)
{
return DbContext.Database.SqlQuery<PossibleDuplicateCustomer>(
"SearchPotentialDuplicates @CustomerId, @FirstName, @LastName, @dob",
new SqlParameter("CustomerId", customer.CustomerId),
new SqlParameter("FirstName", customer.CustomerFirstName),
new SqlParameter("LastName", customer.CustomerLastName),
new SqlParameter("dob", customer.Dob));
}
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时 - 我收到错误;
System.Data.SqlClient.SqlException(0x80131904):'SearchPotentialDuplicates'附近的语法不正确.
所以我用miniprofiler抓住了生成的sql - 这给了我;
DECLARE @p0 int = 12644,
@p1 nvarchar(4) = N'adam',
@p2 nvarchar(3) = N'ant',
@p3 datetime …Run Code Online (Sandbox Code Playgroud) t-sql sql-server stored-procedures mvc-mini-profiler entity-framework-5
Dapper(1.13 Noobget Package)创建不同的SQL语句,具体取决于它是与普通的ADO.NET数据库连接一起使用还是与装饰的迷你探查器数据库连接一起使用.
示例代码(使用Postgresql测试)
Usings:
using System.Linq;
using Dapper;
using Npgsql;
using NUnit.Framework;
using StackExchange.Profiling;
using StackExchange.Profiling.Data;
Run Code Online (Sandbox Code Playgroud)
Test1使用普通的ADO.NET连接并失败:
[TestFixture]
public class DapperTests {
private const string cnnstr = "HOST=...;DATABASE=...;USER ID=...;PASSWORD=...;";
[Test]
public void Test1() {
using (var cnn = new NpgsqlConnection(cnnstr)) {
cnn.Open();
// The following line fails:
cnn.Query<int>("SELECT 1 WHERE 42 IN @Items", new {Items = new[] {41, 42, 43}}).Single();
// Npgsql.NpgsqlException : ERROR: 42883: operator does not exist: integer = integer[]
}
}
Run Code Online (Sandbox Code Playgroud)
Test2使用围绕ADO.NET连接的mini-profiler连接并成功: …
我网站上的Miniprofiler已停止工作.在Chrome控制台中,我收到500错误:
/mini-profiler-resources/includes.js?v=4.0.0.0
Run Code Online (Sandbox Code Playgroud)
错误是:
'/'应用程序中的服务器错误.
System.Web.Routing.UrlRoutingModule没有实现IHttpHandlerFactory或IHttpHandler.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
我的web.config文件包含以下相关行:
<system.webServer>
<handlers>
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
<modules>
<add name="DynamicURLRewrite" type="C3.Code.Controls.Application.Rewriting.URLRewriter" />
<remove name="TelemetryCorrelationHttpModule" />
<add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="integratedMode,managedHandler" />
<remove name="ApplicationInsightsWebTracking" />
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
</modules>
Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net-mvc ×2
sql-server ×2
.net ×1
asp.net ×1
azure ×1
dapper ×1
dbcontext ×1
linq ×1
npgsql ×1
t-sql ×1
umbraco ×1
url-routing ×1
web-config ×1