如何在IIS中使用性能计数器和WCF服务?

时间:2012-03-01 14:44:45

标签: .net wcf performance iis performancecounter

您好,

我在IIS7中有一个WCF服务,它通过TCP(WAS)与winform应用程序通信,现在我需要监视性能。

我已将此添加到web.config文件中:

  <system.serviceModel>
    <diagnostics performanceCounters="All" />

打开性能监视器后,我使用winform运行几个测试,以确保服务已激活。

然后我打开性能监视器(实时),右键单击并添加计数器。我展开了ServiceModelService 4.0.0.0并选择了Calls和Calls Duration,我还选择了我所选择的对象列表框实例中所述的服务(svc),然后单击Add按钮。

在ServiceModelOperation 4.0.0.0下选择“呼叫和呼叫持续时间”时,是否没有要选择的实例或操作? ServiceModelEndpoint 4.0.0.0也是如此?

单击“确定”时,将添加两个计数器(ServiceModelService)。

然后我点击取消冻结显示并启动我的winform应用程序进行几次调用,但是我在性能监视器中看不到任何内容。我试图右键单击其中一个性能计数器并选择“Scale Selected Counter”但这没有任何作用?

目标只是看看WCF服务的执行情况(速度,持续时间,数量,连接等),检查个别操作也很棒。

请帮忙!

注意:这是我试图遵循的文章:http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html

2 个答案:

答案 0 :(得分:6)

看起来这可能是性能计数器如何工作的错误(或设计功能)。经过一番戳之后,我在MSDN forums上找到了这个:

  

我有同样的问题。似乎微软截断了尾巴   命名计数器实例时操作名称的结尾。他们   用某种2位数的10-magic魔法替换截断的部分   数。我猜这是一个哈希,但谁知道它是如何实际的   产生。问题是,这个数字不能保证是唯一的   可能导致计数器名称冲突。如果发生这种碰撞,   它似乎导致所有端点和操作计数器消失(at   至少对我来说。)

     

我有两个名为UpdateMarkupChunk和UpdateMarkupCancel的方法。如果   我注释掉了一个或另一个,以便另一个不存在,他们   两者都在计数器实例名称中解析为UpdateMarkupC53。当我   将它们都注释掉,没有一个计数器实例出现   ServiceModelEndpoint或ServiceModelOperation。

     

你能为微软推荐一个解决方法吗?我有一个制作   已经到位的服务我想监控和改变   操作名称不是一个选项。

微软回应:

  

你是对的。这种行为是设计的。有一个限制   性能计数器实例名称的长度。

     

操作性能计数器位于   使用时查看ServiceModelOperation 4.0.0.0性能对象   性能监视器(Perfmon.exe)。每个操作都有一个人   实例。也就是说,如果给定的合同有10个操作,那么10个操作   计数器实例与该合同相关联。物体   实例使用以下模式命名:

     

(ServiceName)。(ContractName)。(OperationName)@(第一个端点监听器   地址)

     

当Windows Communication Foundation(WCF)计数器实例名称时   超过最大长度,WCF替换实例的一部分   带有哈希值的名称。

所以看起来由于这个最大名称限制,当只有两位数的哈希后缀时,哈希冲突的可能性很大,并且当一个计数器的两个实例具有相同的名称时,它会清除整个计数器它实际上是不可能的。

这有点令人沮丧。因此,除非Microsoft修复此问题(长哈希值,或者通过perf计数器进行更好的冲突处理),或者提供合适的解决方法,否则我们会盲目工作。

答案 1 :(得分:1)

WCF服务包括可以使用Windows Performance监视器(Perfmon.exe)跟踪的性能计数器。您可以从Windows Server 2003中的“管理工具”启动它。

可以从服务的.config文件的诊断部分启用性能计数器,如以下示例配置所示:

<configuration>
  <system.serviceModel>
    <diagnostics performanceCounters="All" /> 
  </system.serviceModel>
</configuration>

您可能需要查看这些文章,这些文章可以指导您如何使用WCF服务的性能计数器: