7

这是创建性能计数器代码:PerformanceCounter.NextValue()抛出InvalidOperationException异常

var ftpPerfCounter = new PerformanceCounter("FTP Service", "Current Connections", "_Total"); 

这就是发生异常:

int cnt = (int)Math.Round(ftpPerfCounter.NextValue()); 

这里的Exception消息:

”错误消息:指定类别的计数器布局无效, 的类型的计数器:AverageCount64,AverageTimer32,CounterMultiTimer,CounterMultiTimerInverse,CounterMultiTimer100Ns,CounterMultiTimer100NsInverse,RawFraction,或SampleFraction 必须紧接着任何基部计数器类型:AverageBase,CounterMultiBase,RawBase或SampleBase”

的错误信息是非常神秘的。我不确定未来可以采取什么措施来避免这种例外。

详细

这种情况发生在Windows Server 2008 R2 64位操作系统上。 FTP服务器是IIS。

回答

1

我没有安装在我的电脑上的IIS,但如果我这样做,这是我想尝试:

  1. 尝试通过拖动和拖放使用Visual Studio对WMI代码生成器Server Explorer。检查生成的代码,看看是否有任何区别于你的代码。
  2. 使用反射镜上看到抛出异常,设置自定义断点内BCL,和繁殖。然后分析调用堆栈的内容并查找可疑代码路径或意外状态。
0

他们似乎已经解决了类似问题here。也许你必须建立一个基地柜台?

2

至少我的Windows Server 2008 R2上的IIS 7.5的性能计数器类别被称为“微软的FTP服务”而不是“FTP服务”。不同的操作系统/ IIS版本可能不同,但它很容易检查。

在目标服务器/设备:

  1. 运行“性能监视器”
  2. 点击“,在左侧导航窗格中的性能监视器
  3. 点击加号图标添加性能计数器
  4. 滚动下可用计数器的列表。查找FTP或Microsoft FTP,看看它的存在......请注意,如果你没有安装,你将不会看到性能计数器微软FTP服务。
  5. 一旦找到,选择它,你会看到一个你可以查询的特定计数器实例列表。其中一种情况是您感兴趣的'_Total'。

当然这也证明性能计数器独立于您的代码工作。这是一件好事,要知道!

有关如何使用Performance Counters in C#/.NET see this stackoverflow post的具体最佳做法。

相关问题