2013-07-08 27 views
17

我正在使用SignalR 1.1.2版本和Windsor Castle在AspNet MVC 4應用程序。 我的問題是,這個錯誤信息顯示出來,因爲我搬到了新的SignalR版本。請求的性能計數器不是自定義計數器,它必須初始化爲ReadOnly。「on RouteTable.Routes.MapHubs();

"The requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly." 
在該行

RouteTable.Routes.MapHubs(); 

這是RegisterHubs類

public static class RegisterHubs 
{ 
    public static void Start() 
    { 
     var signalrDependencyContainer = new WindsorContainer().Install(new HubsInstaller()); 
     var signalrDependency = new SignalrDependencyResolver(signalrDependencyContainer.Kernel); 
     GlobalHost.DependencyResolver = signalrDependency; 
     RouteTable.Routes.MapHubs(); 
    } 
} 

我已經嘗試了一些事情我已經在互聯網上找到,如:

lodctr /R 
cd C:\Windows\Inf\.NETFramework 
lodctr corperfmonsymbols.ini 

但我仍然得到同樣的錯誤消息。有任何想法嗎?

我正在使用dotnet框架4.5。

這是堆棧跟蹤

at System.Diagnostics.PerformanceCounter.InitializeImpl() 

謝謝!

UPDATE 我添加了德魯請求的屏幕截圖。 enter image description here

enter image description here

enter image description here

+0

您能提供整個堆棧跟蹤,而不僅僅是最底層的條目嗎?這將有助於確定SignalR中哪裏出錯。 –

+0

這就是它的一切,沒有別的。 – polonskyg

+0

這不太可能。你可以截取你所看到的任何截圖嗎?根據您迄今爲止告訴我們的情況,我認爲您在SignalR嘗試連接其性能計數器時看到了第一次機會異常。如果您在初始化perf計數器的地方查看SignalR源代碼,您將看到初始化可能失敗的許多原因以及SignalR如何正確處理這些原因。 https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Infrastructure/PerformanceCounterManager.cs#L378 –

回答

21

所以根據您所提供的信息很明顯,這些都是第一次機會異常時SignalR試圖創建性能計數器,但沒有被扔有權以流程運行的身份來執行此操作。您可以放心地忽略這些異常,但顯然不會獲得性能計數器數據。

如果要創建性能計數器,則需要確保應用程序的標識在運行時屬於Performance Counter Users組。無論是或者您需要使用Microsoft ASP.NET SignalR Utilities NuGet package中提供的實用程序應用程序,它允許您創建帶外計數器。只需安裝包並運行命令:

signalr ipc 
+2

它的工作!我不知道那個包,非常感謝你,德魯! – polonskyg

12

Drew Marsh's response,爲我解決了這個問題。以下是描述如何去運行signalr命令的其他詳細信息:


使用軟件包管理器安裝SignalR utils的:

  1. 在VS:工具 - >庫包管理器 - >軟件包管理器 控制檯
  2. 在命令行鍵入:

    PM>Install-Package Microsoft.AspNet.SignalR.Utils

  3. 運行IDE以管理員身份運行:

    PM>signalr ipc

需要管理員權限才能執行運行性能計數器安裝命令(signalr ipc) - 運行沒有這樣做在這個錯誤的結果:

Error: System.Security.SecurityException: Requested registry access is not allowed. at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) at System.Diagnostics.PerformanceCounterLib.CreateRegistryEntry(String categoryName, PerformanceCounterCategoryType categoryType, CounterCreationDataCollec tion creationData, Boolean& iniRegistered) at System.Diagnostics.PerformanceCounterLib.RegisterCategory(String category Name, PerformanceCounterCategoryType categoryType, String categoryHelp, Counter CreationDataCollection creationData) at System.Diagnostics.PerformanceCounterCategory.Create(String categoryName, String categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) at Microsoft.AspNet.SignalR.Utils.PerformanceCounterInstaller.InstallCounters()

at Microsoft.AspNet.SignalR.Utils.InstallPerformanceCountersCommand.Execute(
String[] args) 
    at Microsoft.AspNet.SignalR.Utils.Program.Main(String[] args) 
The Zone of the assembly that failed was: 
MyComputer 
+0

「'signalr'一詞不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。」成功安裝包後。 – UserControl

+0

@UserControl這似乎是安裝信號器有問題。 「Install-Package」命令的結果是什麼?您可能需要查看這裏記錄的一些關於軟件包安裝選項的案例:http://stackoverflow.com/questions/13056329/nuget-is-not-recognized-but-other-nuget-commands-working – CJBS

+0

包已成功安裝。出於某種原因,IDE找不到該命令。我必須找到它的位置目錄並從那裏運行'signalr ipc'。 – UserControl

2

請注意,如果你按照上面提到的(正確)的建議,並調用「signalr IPC」安裝signalR的自定義計數器,喲在使用調試器運行時,應用程序可能會莫名其妙地停止工作。 這個問題是CLR在初始化時如何處理CultureInfo的一個錯誤。至少在SignalR 2.2.0中存在這個問題。 完整的解釋和幾個解決方法在這裏討論:https://github.com/SignalR/SignalR/issues/3414

相關問題