我面临着一个要求,
我希望客户端访问数据中心,但不使用数据库,所以我希望我的web应用程序可以保留一个全局或应用程序会话变量,其中包含数据,每个客户端都可以访问相同的数据……我正在尝试在golabl中声明,但似乎它只能存储字符串,而其他的…
如何解决这个问题?
谢谢。
发布于 2010-11-14 04:44:28
要与所有应用程序用户共享数据,可以使用ASP.NET应用程序对象。给出了在ASP.NET中访问应用程序对象的示例代码:
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"]。它对所有应用程序用户都是通用的。
发布于 2010-11-13 16:49:53
定义全局变量的另一种选择是创建一个具有静态属性的静态类:
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;
    }
}发布于 2010-11-13 13:30:30
如果需要,可以将数据填充到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
https://stackoverflow.com/questions/4171089
复制相似问题