2013-07-08 24 views
17

pracuję z SignalR 1.1.2 wersji i zamku Windsor w aplikacji ASPNET MVC 4 . Moim problemem jest to, że ten komunikat o błędzie jest wyświetlany, odkąd przeniósł się do nowszej wersji SignalR.Żądana wydajność Licznik nie jest przeciwny zwyczaj, musi zostać zainicjowany jako ReadOnly „na RouteTable.Routes.MapHubs();.

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

w linii

RouteTable.Routes.MapHubs(); 

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

Próbowałem już kilka rzeczy znalazłem w internecie jak:

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

Ale ja wciąż otrzymuję ten sam komunikat o błędzie. Jakieś pomysły?

Używam dotnet ramy 4.5.

To StackTrace

at System.Diagnostics.PerformanceCounter.InitializeImpl() 

Dzięki!

AKTUALIZACJA Dodaję zrzuty ekranu wymagane przez Drew. enter image description here

enter image description here

enter image description here

+0

Czy możesz podać cały ślad stosu, a nie tylko najbardziej dolny wpis? Pomoże to ustalić, gdzie w SignalR coś idzie źle. –

+0

To wszystko, co ma, nic więcej. – polonskyg

+0

To nie jest naprawdę możliwe. Czy możesz zrobić zrzut ekranu z tego, na co patrzysz? Na podstawie tego, co nam powiedziałeś do tej pory, myślę, że widzisz wyjątki pierwszej szansy, podczas gdy SignalR próbuje połączyć swoje perfumerie. Jeśli sprawdzisz kod źródłowy SignalR, w którym zainicjuje liczniki perf, zobaczysz, że wiele przyczyn inicjalizacji może się nie udać i jak SignalR radzi sobie z nimi z wdziękiem. https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Infrastructure/PerformanceCounterManager.cs#L378 –

Odpowiedz

21

Więc na podstawie informacji dostarczonych przez Ciebie jasne jest, że są to pierwsze wyjątki szansa wyrzucane gdy SignalR próbuje stworzyć liczników wydajności, ale nie ma prawa do tego z tożsamością, że proces jest uruchomiony pod. Można bezpiecznie zignorować te wyjątki, ale to oczywiście nie otrzyma danych licznika wydajności.

Jeśli chcesz utworzyć liczników wydajności musisz upewnić się, że tożsamość danej aplikacji należy do grupy liczników wydajności użytkowników, gdy jest uruchomiony. Albo to, albo trzeba użyć aplikacji użytkowej przewidzianej w Microsoft ASP.NET SignalR Utilities NuGet package, które pozwala na tworzenie liczników z zespołu. Wystarczy zainstalować pakiet i uruchom polecenie:

signalr ipc 
+2

Zadziałało !! Nie miałem pojęcia o tym pakiecie, dziękuję bardzo Drew! – polonskyg

12

Drew Marsh's response, rozwiązał problem dla mnie.Oto dodatkowe szczegóły opisujące, jak go o uruchomienie komendy signalr:


użyć menedżera pakietów do zainstalowania SignalR utils:

  1. W VS: Narzędzia -> Menedżer pakietów Biblioteka -> Menedżer pakietów konsola
  2. w wierszu polecenia wpisz:

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

  3. Running IDE jako administrator uruchom:

    PM>signalr ipc

uprawnienia administratora są potrzebne do zrobienia uruchomić polecenie instalacji liczników wydajności (signalr ipc) - działa bez prowadzi to do uzyskania tego błędu :

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

"Termin" signalr "nie jest rozpoznawany jako nazwa polecenia cmdlet, funkcji, pliku skryptu lub programu operacyjnego." po pomyślnym zainstalowaniu pakietu. – UserControl

+0

@UserControl Wygląda na to, że wystąpił problem z instalacją signalr. Jaki był rezultat polecenia 'Install-Package'? Warto zapoznać się z niektórymi opisanymi tutaj przypadkami dotyczącymi opcji instalacji pakietów: http://stackoverflow.com/questions/13056329/nuget-is-not-recognized-but-other-nuget-commands-working – CJBS

+0

Pakiet został pomyślnie zainstalowany. Z jakiegoś powodu IDE nie może znaleźć polecenia. Musiałem znaleźć jego katalog lokalizacji i uruchomić 'signalr ipc' stamtąd. – UserControl

2

Należy pamiętać, że jeśli się (poprawnie) informacje wymienione powyżej i wywołać „signalr IPC” zainstalować niestandardowe liczniki signalR jest, yo ur aplikacja może w niezrozumiały sposób przestać działać całkowicie podczas działania z debuggerem. Problem jest błędem w sposobie, w jaki CLR zajmuje się CultureInfo po inicjalizacji. Problem występuje przynajmniej w SignalR 2.2.0. Pełne wyjaśnienie i kilka obejść są omówione tutaj: https://github.com/SignalR/SignalR/issues/3414

Powiązane problemy