是否可以为Glimpse现有的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);
这在我的“自定义”标签上运行良好,但不幸的是,我没有在Glimpse的HUD上显示指标:
有没有办法可以直接为Glimpse提供所需的信息(方法名称和参数),以便在SQL选项卡上本地显示?
答案 0 :(得分:1)
以下建议基于以下事实:您无法使用DbProviderFactory而您无法使用代理的SqlCommand等
开箱即用的数据"开箱即用" SQL选项卡基于通过我们的内部Message Broker发布的给定类型的消息(请参阅下面的相关信息)。由于您的情况有上述限制,为了使事情正确点亮(即您的数据显示在HUD和SQL选项卡中),您需要模拟我们在发布这些消息时所做的工作。这不应该是那么困难,一旦完成,应该继续前进。
如果您查看我们here的各种代理,您将在上面查看我们在什么情况下发布的消息。以下是一些亮点:
DbDataReader
级别进行计算,但您也可以在其他地方进行计算 既然您已经了解了我们期望的消息以及我们如何生成它们,只要您在发布这些消息时传递正确的数据,一切都应该亮起 - 如果您感兴趣{{3}是寻找您要发布的消息的代码。
Message Broker:如果您在GlimpseConfiguration
here,您将看到如何访问Broker。如果需要,这可以静态完成(正如我们here所述)。从这里,您可以发布所需的消息。
帮助者:要生成上述某些消息,您可以使用Support
类here中的帮助程序。我本可以将所有代码发布到本课程中,但我并不认为会有太多人在做你正在做的事情。
起点:使用上述方法,您不需要编写自己的插件。您应该只能访问经纪人GlimpseConfiguration.GetConfiguredMessageBroker()
(确保检查其是否为空,如果Glimpse已关闭则为空,等等)并发布您的消息。
我想你会把利用代理并发布消息的检查放在哪里,你知道需要收集的信息(即在你的自定义lib中)。通常这需要你的lib中的引用来瞥见(你可能不想要),所以为了防止这种情况,你可以调用一个具有瞥见依赖性的代理(可能是另一个VS proj)。因此,您的ado lib仅引用您自己的代码。
为了让你的脚趾湿透,请尝试发布一些虚假的连接和命令消息。假设您从GlimpseConfiguration.GetConfiguredMessageBroker()
获得的经纪人不是空的,这些应该只显示出来。然后,您可以尝试从lib中获取实际数据。
过时的经纪人访问 它标记为过时,因为它将在v2中发生变化。您仍然可以执行您需要执行的操作,但访问代理的方式已更改。对于你目前需要做的事情,这是可以的。
有时为null 您发现这实际上取决于您当前所处的页面生命周期中的位置。为了解决这个问题,我可能会稍微改变一下原来的建议。
在您当前正在创建消息并将其推送到消息总线的代码中,尝试将它们放入HttpContext.Current.Items
。如果您以前没有使用它,那么这是一个asp.net提供的商店,它可以持续使用给定请求的生命周期。您可以在其中放置一个列表,仍然创建您正在执行的消息对象,但将它们放入该列表中,而不是通过代理推送它们。
然后,创建一个HttpModule
(它真的很简单),它可以进入PostLogRequest
事件。在此处理程序中,您可以将列表从上下文中拉出来,遍历它并将消息推送到消息代理(以与您相同的方式访问)。