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的具體最佳做法。

相關問題