服务模型性能计数器实例名称

Posted

技术标签:

【中文标题】服务模型性能计数器实例名称【英文标题】:Service Model performance counters Instance Name 【发布时间】:2016-03-02 13:02:03 【问题描述】:

我正在尝试直接连接到 ServiceModel 发出的性能计数器(用于服务、端点和操作)。问题是当我尝试与某个服务(或端点/操作)关联时,我需要指定计数器的实例名称。

根据MSDN 实例名称简单的模式, 但是在某些情况下,当实例名称的组成部分之一(uri、合约名称等)太长时,它会被缩短,并且在字符串的开头或结尾添加哈希码。文章没有具体说明如何它是散列的。

所以我的问题是有没有办法根据服务名称和地址获取 ServiceModel 实例名称

【问题讨论】:

【参考方案1】:

我知道这并不理想,但您可以将用于生成计数器实例名称的当前 .NET 实现复制到您自己的代码/应用程序中,以编程方式从完整的服务名称和地址生成相同的名称。

您可以在此处查看 WCF 使用的代码:

对于服务性能计数器:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs,6d61d34585241697

对于 EndpointPerformanceCounters:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs,e3319d41297320e3

对于 OperationPerformanceCounters:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs,5e170817afd5d0ba

缺点是对 .NET 命名实例算法的任何更改都会破坏您的实现。

我肯定和你一样沮丧,但还没有找到更好的解决方案。

【讨论】:

感谢您的回答,但我只想知道您是否尝试过此解决方案并获得一致的结果 遗憾的是,我仍然不能自信地说这是一种稳健的方法。几天前我刚刚研究了同样的话题,遇到了你的问题,所以我想分享我的发现。我仍在尝试找到一种解决方法(例如,将 .net 生成的名称硬编码到配置文件中,并在计数器更改时手动更新它们)。虽然复制 .net 命名算法可以作为概念证明,但我还不知道是否值得麻烦。 好吧,我有一个关于操作计数器的问题,实际上我们必须为 GetShortName .Net 方法提供 3 个参数,我的问题是关于第三个参数,即 uri,你能给我举个例子吗它或该参数的含义

以上是关于服务模型性能计数器实例名称的主要内容,如果未能解决你的问题,请参考以下文章

PDH 性能计数器实例名称

性能计数器实例名称与进程名称

系统性能计数器的实例名称是不是已本地化?

即使进程没有退出,进程的性能计数器实例名称是不是可以更改

如何读取 Windows 性能计数器?

如何检索当前 asp.net 应用程序的性能计数器