我有一个要求,
我希望客户端访问数据中心但不使用数据库,因此我希望我的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<string, int> _data;
public static int GetItemsByTag(string tag)
{
lock (_syncRoot)
{
if (_data == null)
_data = LoadItemsByTag();
return _data[tag];
}
}
private static Dictionary<string, int> LoadItemsByTag()
{
var result = new Dictionary<string, int>();
// Load the data from e.g. an XML file into the result object.
return result;
}
}
如果需要,您可以将数据填充到Application
对象中。它在应用程序实例之间不是持久的,但这可能就足够了。
(我不会在一分钟内建议这是一种最佳做法,但是如果没有更清晰的要求说明,那是我所能建议的。)
http://msdn.microsoft.com/en-us/library/system.web.ui.page.application.aspxhttp://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
您还可以使用Cache,它具有诸如设置到期时间/日期的优势。
如果使用WebApplication
或MVC
,只需转到Global.asax
(在WebSite项目中,您需要从添加新项菜单中添加Global.asax
)。我将解释为您的Web应用程序部署两个全局变量:打开Global.asax
文件,然后在Application_Start
函数中定义变量,如下所示:
void Application_Start(object sender, EventArgs e)
{
Application.Lock();
Application["variable1"] = "Some Value for variable1";
Application["variable2"] = "Some Value for variable2";
Application.UnLock();
}
如果要使用aspx页面中的那些全局变量,只需要这样调用它们:
<p>I want to call variable1 <%=Application["variable1"].ToString() %></p>
<p>I want to call variable1 <%=Application["variable2"].ToString() %></p>
但是,如果您想像这样在服务器端调用它们时使用这些全局变量:
protected void Page_Load(object sender, EventArgs e)
{
string str1 = Application["variable1"].ToString();
string str2 = Application["variable2"].ToString();
}
注意:您必须注意,这些全局变量对所有用户都是公用的,不适合身份验证作业。