ASP.NETサイト(IIS)のユーザー数を確認するにはどうすればよいですか?そして彼らの情報は?
質問
ASP.NETアプリケーションでアクティブなセッションを持つユーザーの数を決定する方法はありますか?特定のアプリケーションに管理者/ツールのページがあり、セッション数などの開いているすべてのセッションに関する情報を表示したいと思います。また、リクエストしたマシンのアドレス、または各ユーザーのその他の資格情報を表示したいです。
解決
ASP.NETパフォーマンスカウンターは、State Server Sessions Active(アクティブなユーザーセッションの数)が役立ちます。次に、管理ページからパフォーマンスカウンターを読み取って表示するだけです。 。
他のヒント
global.aspxで
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Application["OnlineUsers"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate
// mode is set to InProc in the Web.config file.
// If session mode is set to StateServer or SQLServer,
// the event is not raised.
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
}
注: Application.LockメソッドとApplication.Unlockメソッドは、複数のスレッドがこの変数を同時に変更しないようにするために使用されます。
Web.configで
SessionStateが「InProc」であることを確認します;これが機能するため
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="20" />
</system.web>
.aspxファイル内
Visitors online: <%= Application["OnlineUsers"].ToString() %>
注:コードは元々 http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for- ASP-NET-website.aspx (リンクはアクティブではなくなりました)
.netメンバーシップを使用している場合は、使用できます
Membership.GetNumberOfUsersOnline()
詳細: http:/ /msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx
同じメカニズムを自分で実装する場合は、CurrentUserManagerクラスのように定義して、ここでシングルトンパターンを実装できます。クラスCurrentUserManagerのこのシングルトンオブジェクトは、AppDomain内で一意です。このクラスでは、自己のインスタンスを1回作成し、コンストラクターを非表示にすることで、他のユーザーがこのクラスの新しいインスタンスを作成することを禁止します。このオブジェクトにリクエストが届くたびに、その単一のインスタンスがレスポンスを返します。そのため、すべてのユーザーの記録を保持するリストを実装する場合(ユーザーが来たらリストに追加し、外に出たらリストから削除します)。最後に、現在のユーザーカウントが必要な場合は、このシングルトンオブジェクトにリストカウントを問い合わせることができます。
過去にこれを確認した方法は、Global.asaxファイルのSession_OnStartイベントに追加のコードを追加して、セッションに依存しない方法で情報を保存することです。データベースまたはHttpApplicationStateオブジェクト。必要に応じて、Session_OnEndを使用してこの情報を削除することもできます。
Application_StartイベントとApplication_Endイベントを使用して、この情報の一部を初期化およびクリーンアップできます。
管理ページはこの情報を読み取り、統計などを表示できます。
これは、 http://msdn.microsoftで詳細に説明されています。 com / en-us / library / ms178594.aspx および http: //msdn.microsoft.com/en-us/library/ms178581.aspx 。
セッション状態プロバイダーとしてsqlサーバーを使用する場合、このコードを使用してオンラインユーザーの数をカウントできます。
SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()
PerformanceCounterを使用して、System.Diagnostics名前空間からデータを取得できます。これにより、「アクティブなセッション」を取得できます。などなど。リモートだけでなくローカルサーバーからも取得できます。
ローカルマシンで行う方法の例
void Main()
{
var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__");
Console.WriteLine(pc.NextValue());
}
またはリモートサーバーの場合:
void Main()
{
var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__", "ServerHostName.domain");
Console.WriteLine(pc.NextValue());
}
ASP.NETのパフォーマンスカウンターは、ASPの完全なリストを提供します。監視できるNETカウンター
Google Analyticsには、ASP.NET MVCアプリケーションに実装できるAPIが付属しています。 リアルタイム機能を備えているため、ウェブサイト上の現在のユーザー数を追跡して、アプリケーションに戻すことができます。