18

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."

ラインで

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

ありがとう!

更新 ドリューからリクエストされたスクリーンショットを追加しています。 ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

4

6 に答える 6

27

したがって、提供した情報に基づいて、SignalR がパフォーマンス カウンターを作成しようとしているが、プロセスが実行されている ID で作成する権限がない場合にスローされる最初のチャンスの例外であることは明らかです。これらの例外は無視しても問題ありませんが、明らかにパフォーマンス カウンター データは取得されません。

パフォーマンス カウンターを作成する場合は、実行時にアプリケーションの ID が Performance Counter Users グループに属していることを確認する必要があります。または、帯域外のカウンターを作成できるMicrosoft ASP.NET SignalR Utilities NuGet パッケージで提供されるユーティリティ アプリケーションを使用する必要があります。パッケージをインストールしてコマンドを実行するだけです:

signalr ipc
于 2013-07-10T03:31:41.310 に答える
14

Drew Marsh の応答は、私の問題も解決しました。signalrコマンドの実行方法を説明する追加の詳細を次に示します。


パッケージ マネージャーを使用して SignalR Utils をインストールします。

  1. VS: ツール -> ライブラリ パッケージ マネージャー -> パッケージ マネージャー コンソール
  2. コマンド ラインから、次のように入力します。

    午後>Install-Package Microsoft.AspNet.SignalR.Utils

  3. 管理者として IDE を実行し、次を実行します。

    午後>signalr ipc

パフォーマンス カウンターのインストール コマンド ( ) を実行するには、管理者のアクセス許可が必要です。コマンドsignalr ipcを実行せずに実行すると、次のエラーが発生します。

エラー: System.Security.SecurityException: 要求されたレジストリ アクセスは許可されていません。System.Diagnostics.PerformanceCounterLib.CreateRegistryEntry (String categoryName、PerformanceCounterCategoryType categoryType、CounterCreationDataCollection creationData、Boolean& iniRegistered) で Microsoft.Win32.RegistryKey.OpenSubKey (文字列名、ブール値書き込み可能) で System.Diagnostics.PerformanceCounterLib.RegisterCategory (文字列カテゴリ名、 Microsoft.AspNet.SignalR.Utils の System.Diagnostics.PerformanceCounterCategory.Create(String categoryName, String categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) の PerformanceCounterCategoryType categoryType、String categoryHelp、Counter CreationDataCollection creationData)。

   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
于 2014-01-03T18:45:43.113 に答える
3

上記の (正しい) アドバイスに従い、'signalr ipc' を呼び出して SignalR のカスタム カウンターをインストールすると、デバッガーで実行すると、アプリケーションが不可解に完全に動作しなくなる可能性があることに注意してください。この問題は、CLR が初期化時に CultureInfo を処理する方法のバグです。この問題は、少なくとも SignalR 2.2.0 に存在します。完全な説明といくつかの回避策については、https ://github.com/SignalR/SignalR/issues/3414 で説明しています。

于 2016-06-29T02:26:24.057 に答える
0

パフォーマンス カウンターをまったく使用したくない場合は、リゾルバーがIPerformanceCounterManager.

https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Hosting/HostDependencyResolverExtensions.csを参照してください

    private static void InitializePerformanceCounters(this IDependencyResolver resolver, string instanceName, CancellationToken hostShutdownToken)
    {
        var counters = resolver.Resolve<IPerformanceCounterManager>();
        if (counters != null)
        {
            counters.Initialize(instanceName, hostShutdownToken);
        }
    }

未構成の依存関係を要求されたときに ninject がスローされるため、問題に遭遇しました。

于 2021-02-02T16:24:32.067 に答える