Как определить глобальную переменную в веб-приложении ASP.net
У меня есть требование,
Я хочу, чтобы клиент получил доступ к центру данных, но без использования базы данных, поэтому я хочу, чтобы мое веб-приложение могло сохранять глобальную переменную или переменную сеанса приложения, которая содержит данные, каждый клиент может получить доступ к одним и тем же данным... Я пытаюсь объявить в golabl, но, кажется, может хранить только String, но другие...
Как решить эту проблему?
Благодарю.
4 ответа
Чтобы поделиться данными со всеми пользователями приложения, вы можете использовать объект приложения ASP.NET. Ниже приведен пример кода для доступа к объекту Application в 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"]
может использоваться любым пользователем во всем приложении. Это будет общим для всех пользователей приложения.
Другой вариант определения глобальной переменной - создание статического класса со статическим свойством:
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.aspx
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
Если вы используете WebApplication
или MVC
просто иди в Global.asax
(в проекте WebSite нужно добавить Global.asax
из меню добавления нового элемента).
Я объясню, как развернуть две глобальные переменные для вашего веб-приложения:
Откройте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>
Но если вы хотите использовать эти глобальные переменные в call'em на стороне сервера, например:
protected void Page_Load(object sender, EventArgs e)
{
string str1 = Application["variable1"].ToString();
string str2 = Application["variable2"].ToString();
}
Примечание: вы должны знать, что эти глобальные переменные являются общедоступными для всех пользователей и не подходят для заданий аутентификации.
Вы также можете использовать кэш, который имеет такие преимущества, как возможность установить время и дату истечения срока действия.