请求的性能计数器不是自定义计数器,必须初始化为ReadOnly."在RouteTable.Routes.MapHubs();

pol*_*kyg 17 c# asp.net signalr signalr-hub

我在AspNet MVC 4应用程序中使用SignalR 1.1.2版本和Windsor Castle.我的问题是,自从我转移到较新的SignalR版本后,此错误消息显示出来.

"The requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly."
Run Code Online (Sandbox Code Playgroud)

在线

    RouteTable.Routes.MapHubs();
Run Code Online (Sandbox Code Playgroud)

这是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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些我在互联网上找到的东西,比如:

lodctr /R
cd C:\Windows\Inf\.NETFramework
lodctr corperfmonsymbols.ini
Run Code Online (Sandbox Code Playgroud)

但我仍然收到相同的错误消息.有任何想法吗?

我正在使用dotnet framework 4.5.

这是堆栈跟踪

at System.Diagnostics.PerformanceCounter.InitializeImpl()
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新 我正在添加Drew请求的屏幕截图. 在此输入图像描述

在此输入图像描述

在此输入图像描述

Dre*_*rsh 24

因此,基于您提供的信息,很明显,这些是在SignalR尝试创建性能计数器时抛出的第一次机会异常,但是没有权利使用运行该进程的标识来执行此操作.您可以安全地忽略这些异常,但显然您无法获得性能计数器数据.

如果要创建性能计数器,则需要确保应用程序的标识在运行时属于Performance Counter Users组.或者您需要使用Microsoft ASP.NET SignalR Utilities NuGet包中提供的实用程序应用程序,该程序包允许您在带外创建计数器.只需安装包并运行命令:

signalr ipc
Run Code Online (Sandbox Code Playgroud)

  • 有效!!我不知道那个包,非常感谢Drew! (2认同)
  • 这对我不起作用,直到我指定了“signalR.exe”的完整路径。只需点击 Windows 按钮并输入“signalr.exe”即可找到它...在我的例子中,它是“C:\SVN\trunk\TestSln\packages\Microsoft.AspNet.SignalR.Utils.2.4.1\tools\net40\ signalr.exe” 然后我可以安装性能计数器: PM> C:\SVN\trunk\TestSln\packages\Microsoft.AspNet.SignalR.Utils.2.4.1\tools\net40\signalr.exe ipc (2认同)

CJB*_*JBS 14

Drew Marsh的回答也解决了我的问题.以下是描述如何运行signalr命令的其他详细信息:


使用软件包管理器安装SignalR Utils:

  1. 在VS中:工具 - >库包管理器 - >包管理器控制台
  2. 从命令行键入:

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

  3. 以管理员身份运行IDE,运行:

    PM> signalr ipc

需要管理员权限才能运行性能计数器安装命令(signalr ipc) - 运行时不执行此操作会导致此错误:

错误:System.Security.SecurityException:不允许请求的注册表访问.在System.Diagnostics.PerformanceCounterLib.RegisterCategory的System.Diagnostics.PerformanceCounterLib.CreateRegistryEntry(String categoryName,PerformanceCounterCategoryType categoryType,CounterCreationDataCollec tion creationData,Boolean&iniRegistered)中的Microsoft.Win32.RegistryKey.OpenSubKey(String name,Boolean writable)(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
Run Code Online (Sandbox Code Playgroud)