0

ASP.NET 2.0(C#)でWebアプリを開発しています。問題を解決するのに問題があります。

アプリケーションはユーザーをオンラインで表示する必要があり、管理者のみがユーザー名を表示する必要があります。Application []オブジェクトを使用してusermameとcountを保存し、Globall.asaxファイルに値を設定しています。

次のコードでは、カウンターに関連するセクションを示します。

   protected void Application_Start(object sender, EventArgs e){
            Application["OnlineCounter"] = 0; 
    }
    protected void Session_Start(Object sender, EventArgs e){
            // Code that runs when a new session is started
            if (Application["OnlineCounter"] != null){
                Application.Lock();
                Application["OnlineCounter"] = ((int)Application["OnlineCounter"]) + 1;
                Application.UnLock();
            }
    }
    protected void Session_End(Object sender, EventArgs e){
            // Code that runs when a new session is started
            if (Application["OnlineCounter"] != null){
                Application.Lock();
                Application["OnlineCounter"] = ((int)Application["OnlineCounter"]) - 1;
                Application.UnLock();
            }
    }

ローカルマシンでこのコードを使用すると、オンラインユーザーを正しくカウントできます。代わりに、このコードをサーバー(Windows 2003 ServerおよびIIS6)で公開すると、次の問題が見つかりました。3人の異なるユーザー(異なるブラウザーを使用)で自分のマシンからアクセスすると、1つのページに1人のユーザーしか表示されません(各ブラウザーで)オンラインユーザーは1人だけです)!

これにはいくつかの問題がありますか?任意の提案をいただければ幸いです。ありがとう

4

2 に答える 2

1

パフォーマンス カウンターを使用して、その数値を取得できます。

ASP.NET のパフォーマンス カウンターの一覧を次に示します。「ASP.NET Application Performance Counters」の下にある「Sessions Active」の説明を探します。

次に、PerformanceCounter クラスを使用して、アプリケーションのパフォーマンス カウンターの値を取得できます。

問題は、これには特権が必要なことです:

Windows Vista、Windows XP Professional x64 Edition、または Windows Server 2003 でパフォーマンス カウンターを読み取るには、Performance Monitor Users グループのメンバーであるか、管理者特権を持っている必要があります。

これを行う 1 つの方法は、アプリケーションの一部を偽装して、それらの権限を持つユーザーによって実行されるようにすることです。.asmx Web サービス、または必要な情報を表示する Web フォーム自体である可能性があります。web.config で場所ID の偽装を使用して、そのサービスのみを偽装できます。必要な権限を持つユーザーを設定し、そのユーザーになりすます。

于 2012-05-08T12:10:46.307 に答える
0

サーバーは、アプリケーション プールごとに複数のワーカー プロセスを使用するように構成されていますか?

ASP.NET 状態管理に関する推奨事項: http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

アプリケーションの範囲 : アプリケーションの状態の範囲も不利になる可能性があります。アプリケーション状態に格納された変数は、アプリケーションが実行されている特定のプロセスに対してのみグローバルであり、各アプリケーション プロセスは異なる値を持つことができます。したがって、アプリケーションの状態に依存して、Web ガーデンおよび Web ファーム サーバー構成で一意の値を格納したり、グローバル カウンターを更新したりすることはできません。

IIS 6.0 を使用した Web ガーデンの構成: https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/659f2e2c-a58b-4770-833b-df96cabe569e.mspx?mfr=true

于 2012-05-08T09:45:20.603 に答える