7

这是创建性能计数器的代码:

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。

4

3 回答 3

2

至少在我的带有 IIS 7.5 的 Windows Server 2008 R2 上,性能计数器类别称为“Microsoft FTP 服务”而不是“FTP 服务”。不同的 OS/IIS 版本可能会有所不同,但很容易检查。

在您的目标服务器/机器上:

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

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

有关如何在 C#/.NET 中使用性能计数器的具体最佳实践,请参阅此 stackoverflow 帖子

于 2012-08-10T18:59:19.037 回答
1

我的 PC 上没有安装 IIS,但如果我安装了,我会尝试以下方法:

  1. 尝试通过从服务器资源管理器拖放来使用 Visual Studio 的 WMI 代码生成器。检查生成的代码,看看是否与您的代码有任何差异。
  2. 使用反射器查看抛出异常的位置,在 BCL 中设置自定义断点,然后重现。然后分析调用堆栈内容并寻找可疑的代码路径或意外状态。
于 2012-08-02T18:14:15.657 回答
0

他们似乎在这里解决了类似的问题。也许您必须设置一个基本计数器?

于 2012-08-10T11:10:58.393 回答