ASP.NET のアプリケーション状態は、すべてのクライアントがアプリケーション全体で使う状態情報の格納に使われます。
マイクロソフトによると、アプリケーション状態はアプリケーション全体で利用され、サーバーに固有のものであり、 読み書き可能なデータも格納できるが、サーバーアフィニティを避けるためには、 呼び出し専用データのみを格納すべきとのことです。
スポンサーリンク
また、アプリケーション状態は ASP ( Active Server Pages ) からの移行を意識した互換性を目的とする部分があり、ASP.NET では使用することは少ないと思います。ASP.NET ではアプリケーション状態(読み出し専用の場合)の代わりに、読み出し専用の静的変数を使用するほうがパフォーマンス的にも有効です。
アプリケーション状態管理と静的変数の使用サンプル
アプリケーション状態を使用するサンプルコードになります。グローバルアプリケーションクラス ( Global.asax ) を追加し、その中でアプリケーション状態管理と静的変数の読み取りを行っています。
VB.NET
Public Class Global_asax Inherits System.Web.HttpApplication ' グローバル静的変数を使用する場合 Public Shared app_version As String = "2.0.0.0" Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' アプリケーションの起動時に呼び出されます。 ' アプリケーション状態を使用する場合 Application("app_version") = "1.0.0.0" End Sub End Class
C#
namespace WebApplication2 { public class Global : System.Web.HttpApplication { // グローバル静的変数を使用する場合 static public string app_version = "2.0.0.0"; protected void Application_Start(object sender, EventArgs e) { // アプリケーション状態を使用する場合 Application["app_version"] = "1.0.0.0"; } } }
アプリケーション状態管理をフォームで読み取る
アプリケーション状態およびグローバル静的変数を各フォームで取得するサンプルコードになります。
ASPX
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>状態管理を読み出す</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> </div> </form> </body> </html>
VB.NET
Partial Public Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' アプリケーション状態を取得する Label1.Text = Application("app_version") ' 1.0.0.0 ' グローバル静的変数を取得する Label2.Text = Global_asax.app_version ' 2.0.0.0 End Sub End Class
C#
namespace WebApplication2 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // アプリケーション状態を取得する Label1.Text = Application["app_version"].ToString(); // 1.0.0.0 // グローバル静的変数を取得する Label2.Text = Global.app_version; // 2.0.0.0 } } }