2013-07-08 31 views
17

Tôi đang làm việc với phiên bản SignalR 1.1.2 và Lâu đài Windsor trong ứng dụng AspNet MVC 4 . vấn đề của tôi là thông báo lỗi này được hiển thị kể từ khi tôi chuyển lên phiên bản mới hơn SignalR.Bộ đếm hiệu suất được yêu cầu không phải là bộ đếm tùy chỉnh, nó phải được khởi tạo là ReadOnly. "Trên RouteTable.Routes.MapHubs();

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

trong dòng

RouteTable.Routes.MapHubs(); 

Đây là RegisterHubs lớp

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(); 
    } 
} 

Tôi đã thử một vài điều tôi đã tìm thấy trên internet như:

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

Nhưng tôi vẫn nhận được thông báo lỗi tương tự. Bất kỳ ý tưởng?

Tôi đang sử dụng khung dotnet 4.5.

Đây là stacktrace

at System.Diagnostics.PerformanceCounter.InitializeImpl() 

Cảm ơn!

CẬP NHẬT Tôi đang thêm ảnh chụp màn hình được Drew yêu cầu. enter image description here

enter image description here

enter image description here

+0

Bạn có thể cung cấp toàn bộ dấu vết ngăn xếp chứ không chỉ mục nhập thấp nhất? Điều đó sẽ giúp xác định nơi mà trong SignalR mọi thứ đang đi sai. –

+0

Đó là tất cả mọi thứ nó có, không có gì khác. – polonskyg

+0

Điều đó không thực sự khả thi. Bạn có thể chụp ảnh màn hình của bất cứ điều gì bạn đang xem? Dựa trên những gì bạn đã nói với chúng tôi cho đến nay tôi nghĩ rằng bạn đang nhìn thấy ngoại lệ cơ hội đầu tiên trong khi SignalR đang cố gắng để kết nối lên quầy perf của nó. Nếu bạn kiểm tra mã nguồn SignalR nơi nó khởi tạo các bộ đếm perf bạn sẽ thấy nhiều lý do khởi tạo có thể thất bại và cách SignalR xử lý những điều này một cách duyên dáng. https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Infrastructure/PerformanceCounterManager.cs#L378 –

Trả lời

21

Vì vậy, dựa trên thông tin bạn đã cung cấp rõ ràng rằng đây là những trường hợp ngoại lệ cơ hội đầu tiên bị ném khi SignalR đang nỗ lực để tạo ra các bộ đếm hiệu suất nhưng không có quyền làm như vậy với danh tính rằng quá trình đang chạy theo. Bạn có thể bỏ qua những ngoại lệ này một cách an toàn, nhưng rõ ràng bạn sẽ không nhận được dữ liệu hiệu suất truy cập.

Nếu bạn muốn tạo bộ đếm hiệu suất, bạn cần đảm bảo rằng danh tính của ứng dụng của bạn thuộc về nhóm Người dùng bộ đếm hiệu suất khi nó đang chạy. Hoặc là hoặc bạn cần sử dụng ứng dụng tiện ích được cung cấp trong Microsoft ASP.NET SignalR Utilities NuGet package cho phép bạn tạo các bộ đếm ngoài băng tần. Chỉ cần cài đặt gói và chạy lệnh:

signalr ipc 
+2

Nó hoạt động !! Tôi không có ý tưởng về gói đó, cảm ơn bạn rất nhiều Drew! – polonskyg

12

Drew Marsh's response, đã giải quyết được sự cố cho tôi.Dưới đây là thông tin chi tiết thêm mô tả làm thế nào để đi về việc chạy các signalr lệnh:


Sử dụng trình quản lý gói để cài đặt SignalR Utils:

  1. Trong VS: Tools -> Manager Thư viện Package -> Package Manager Bảng điều khiển
  2. Từ dòng lệnh, gõ:

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

  3. Chạy IDE như một quản trị viên, hãy chạy:

    PM>signalr ipc

quyền quản trị là cần thiết để làm chạy lệnh cài đặt bộ đếm hiệu suất (signalr ipc) - chạy mà không cần làm như vậy kết quả trong lỗi này :

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

"Thuật ngữ 'signalr' không được nhận dạng là tên của lệnh ghép ngắn, chức năng, tệp tập lệnh hoặc chương trình có thể hoạt động." sau khi cài đặt thành công gói. – UserControl

+0

@UserControl Có vẻ như đã xảy ra sự cố khi cài đặt signalr. Kết quả của lệnh 'Install-Package' là gì? Bạn có thể muốn xem xét một số trường hợp được ghi lại ở đây liên quan đến các tùy chọn cài đặt gói: http://stackoverflow.com/questions/13056329/nuget-is-not-recognized-but-other-nuget-commands-working – CJBS

+0

Gói cài đặt thành công. Đối với một số lý do IDE không thể tìm thấy lệnh. Tôi đã phải tìm thư mục vị trí của nó và chạy 'signalr ipc' từ đó. – UserControl

2

Xin lưu ý rằng nếu bạn làm theo lời khuyên (đúng) nêu trên và gọi 'signalr ipc' để cài đặt quầy tùy chỉnh của SignalR, yo ứng dụng ur hoàn toàn có thể ngừng hoạt động hoàn toàn khi chạy với trình gỡ lỗi. Vấn đề là một lỗi trong cách CLR giao dịch với CultureInfo khi khởi tạo. Vấn đề tồn tại ít nhất trong SignalR 2.2.0. Giải thích đầy đủ và một vài cách giải quyết được thảo luận tại đây: https://github.com/SignalR/SignalR/issues/3414

Các vấn đề liên quan