如何在ASP.net Web应用程序中定义全局变量

我有面子要求,

我希望客户端访问数据中心但不使用数据库,所以我希望我的Web应用程序可以保留全局或Application会话变量,其中包含数据,每个客户端都可以访问相同的数据…我试着在golabl中声明,但似乎只能存储String但其他人……

如何解决这个问题呢 ?

谢谢。

要与所有应用程序用户共享数据,可以使用ASP.NET Application对象。 给出了在ASP.NET中访问Application对象的示例代码:

Hashtable htblGlobalValues = null; if (Application["GlobalValueKey"] != null) { htblGlobalValues = Application["GlobalValueKey"] as Hashtable; } else { htblGlobalValues = new Hashtable(); } htblGlobalValues.Add("Key1", "Value1"); htblGlobalValues.Add("Key2", "Value2"); this.Application["GlobalValueKey"] = htblGlobalValues; 

Application["GlobalValueKey"]可以在任何用户的整个应用程序中的任何位置使用。 它对所有应用程序用户都是通用的。

定义全局变量的另一个选择是创建一个带静态属性的静态类:

 public static class GlobalVariables { public static string MyGlobalVariable { get; set; } } 

如果要将其用作数据存储,可以使这更复杂,但同样的想法也是如此。 比如,你有一个存储全局数据的字典,你可以这样做:

 public static class GlobalData { private static readonly object _syncRoot = new object(); private static Dictionary _data; public static int GetItemsByTag(string tag) { lock (_syncRoot) { if (_data == null) _data = LoadItemsByTag(); return _data[tag]; } } private static Dictionary LoadItemsByTag() { var result = new Dictionary(); // Load the data from eg an XML file into the result object. return result; } } 

如果需要,可以将数据填充到Application对象中。 它不是跨应用程序实例持久化,但这可能就足够了。

(我不是一分钟就会建议这是一种最佳做法,但如果没有更清晰的要求,那就是我所能提出的建议。)

http://msdn.microsoft.com/en-us/library/system.web.ui.page.application.aspx
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

您还可以使用Cache ,它具有设置过期时间/日期的能力等优点。