有没有可能为一瞥';什么是现有的SQL选项卡?

有没有可能为一瞥';什么是现有的SQL选项卡?,sql,asp.net,performance-testing,glimpse,Sql,Asp.net,Performance Testing,Glimpse,可以为Spile现有的SQL选项卡编写插件吗 我正在尝试记录我的SQL查询,而当前可用的扩展不支持我们的内部SQL库。我已经编写了一个自定义插件,它记录了我想要的内容,但是它的功能有限,并且没有与现有的SQL选项卡集成 目前,我正在使用DAL基类中的一个助手方法登录到我的自定义插件。此函数使用SqlCommand和Duration在“我的自定义”选项卡上显示数据: // simplified example: Stopwatch sw = Stopwatch.StartNew(); sqlCo

可以为Spile现有的SQL选项卡编写插件吗

我正在尝试记录我的SQL查询,而当前可用的扩展不支持我们的内部SQL库。我已经编写了一个自定义插件,它记录了我想要的内容,但是它的功能有限,并且没有与现有的SQL选项卡集成

目前,我正在使用DAL基类中的一个助手方法登录到我的自定义插件。此函数使用SqlCommand和Duration在“我的自定义”选项卡上显示数据:

// simplified example:
Stopwatch sw = Stopwatch.StartNew();

sqlCommand.Connection = sqlConnection;
sqlConnection.Open();
object result = sqlCommand.ExecuteScalar();
sqlConnection.Close();

sw.Stop();

long duration = sw.ElapsedMilliseconds;
LogSqlActivity(sqlCommand, null, duration);
这在我的“自定义”选项卡上效果很好,但不幸的是,这意味着我没有在Spile的HUD上显示指标:

是否有一种方法可以直接提供它所需的信息(方法名称和参数方面),以便它以本机方式显示在SQL选项卡上?

以下建议基于这样一个事实,即您不能使用DbProviderFactory,也不能使用代理的SqlCommand等。

“开箱即用”SQL选项卡中显示的数据基于通过我们的内部Message Broker发布的给定类型的消息(请参阅下面有关此信息的信息)。由于您案例中的上述限制,为了使事情正确地亮起(即,您的数据显示在HUD和SQL选项卡中),您需要模拟我们在发布这些消息时在封面下所做的工作。这不应该那么困难,一旦完成,就应该继续前进

如果您查看我们拥有的各种代理,您将在上面看到我们在什么情况下发布的消息。以下是一些亮点:

  • DbCommand
    • 日志命令启动-
    • 日志命令错误-
    • 日志命令结束-
  • DbConnection:
    • 日志连接打开-
    • 日志连接已关闭-
  • DbTransaction
    • 日志已启动-
    • 已提交日志-
    • 日志回滚-
  • 其他
    • 命令行计数-Glimess在
      DbDataReader
      级别计算此值,但您也可以在其他位置进行此计算
现在,您已经了解了我们期望的消息以及如何生成这些消息,只要在发布这些消息时传入正确的数据,所有内容都应该亮起——如果您感兴趣的是查找要发布的消息的代码的话


Message Broker:如果您在
GlimpseConfiguration
上查看如何访问代理。如果需要,这可以静态完成(就像我们所做的那样)。从这里您可以发布所需的消息

帮助程序:要生成上述一些消息,可以使用
支持类中的帮助程序。我会将所有用于发布实际消息的代码都转移到这个类中,但我不认为会有太多人在做你正在做的事情


更新1 起点:使用上述方法,您不需要编写自己的插件。您应该只能够访问代理
GlimpseConfiguration.GetConfiguredMessageBroker()
(确保检查其是否为空,如果Glimpse已关闭,则为空,等等)并发布消息

我可以想象,您会将利用代理并发布消息的检查放在您知道需要收集的信息的位置(即在自定义库中)。通常这需要库中的引用来窥视(您可能不希望),因此为了防止这种情况,您可以从库中调用具有窥视依赖性的代理(可能是另一个VS proj)。因此,ado库只引用您自己的代码

为了让你的脚趾湿润,试着只发布几个假连接和命令消息。假设您从
GlimpseConfiguration.GetConfiguredMessageBroker()
获得的代理不为null,那么这些代理应该会显示出来。然后,您可以努力从lib中获取真实数据


更新2 过时的代理访问 它被标记为过时,因为它将在v2中更改。您仍然可以做您需要做的事情,但是访问代理的方式已经改变。对于您当前需要做的事情,这是可以的

有时为空 正如您所发现的,这实际上取决于您当前在页面生命周期中的位置。为了解决这个问题,我可能会稍微改变一下我原来的建议

在当前创建消息并将其推送到消息总线的代码中,尝试将它们放入
HttpContext.Current.Items
。如果您以前没有使用过它,这是asp.net提供的一个开箱即用的存储,它将持续给定请求的生命周期。您可以将一个列表放在那里,仍然创建您正在执行的消息对象,但是将它们放在该列表中,而不是将它们推送到代理中


然后,创建一个
HttpModule
(操作非常简单),它将点击
PostLogRequest
事件。在这个处理程序中,您将从上下文中提取列表,对其进行迭代,并将消息推送到MessageBroker中(访问方式与以前相同)。

下面是几个快速问题。。。你的库是否在封面下使用Ado(我猜是的)?如果是这样的话,它是否使用了DbProviderFactory基础设施?它使用ADO,我尝试将项目转换为使用DbProviderFactory,但由于依赖SqlCommand的调用数量巨大,结果太复杂/耗时。我花了几个小时在上面,最后不得不恢复。所有的DB代码都是通过一个公共类来实现的,所以我希望我可以在这个类中直接与Spile接口,并告诉它我在做什么。这对我有用,阿尔雷亚