我想知道.NET 环境中是否存在有效的会话或静态。我需要的是一个变量来存储一些维持其值的数据,可以通过所有 ASP.NET 页面/C# 表单访问,但对于使用该应用程序的所有用户来说并不是唯一的。
6 回答
我认为您正在寻找应用程序状态而不是应用程序缓存。应用程序状态的工作方式与会话状态相同,但会在所有会话之间共享。
示例用法:
Application["Message"] = "Welcome to my Website";
更多信息: http: //www.codeproject.com/Articles/87316/A-walkthrough-to-Application-State
那么您的答案很可能是应用程序缓存。看看 System.Web.Caching
由于有一些关于缓存对象生命周期的讨论,您可以设置它。用户没有具体说明,但它必须存活多长时间。在应用程序回收之间?在单个实例的生命周期内,是否需要在实例之间。缓存将适用于最简单的要求。
您可以尝试使用应用程序范围的变量来处理这个问题。
首先在 Global.asax 文件中,添加以下内容:
void Application_Start(object sender, EventArgs e)
{
[Other Stuff Already Here Omitted]
Application["MyVariable"] = "My Default value";
}
然后在任何页面上,您都可以访问:
var myVar = Application["MyVariable"];
您可以将类公开为静态。这将使它在所有会话中可用,但仅限于该应用程序实例。
答案是不。在那个级别上不存在“.Net 环境”。您的 .Net 代码也从主机获得运行时限制。让我们定义两个主机(还有更多):IIS 和“简单的主 exe”。
对于 IIS 托管代码,您在主机创建线程(或者更确切地说分配一个线程)并在该线程上执行您的代码的环境中运行。主机本身定义何时以及是否重置进程。您不能,或者更确切地说,不应该假设关于哪个进程或线程正在执行您的代码。当您谈论农场中的 iis 时,这会得到增强。
对于 exe 中的简单主代码,操作系统会创建进程和初始第一个线程,并将执行指针设置为主函数中的第一条语句。
“静态”在拥有过程的整个生命周期内保持状态,这是 .Net 给您的保证。
“会话”是处理比静态属性更多的特定实现。
我建议您在描述您的主机时对问题进行改进。对于 iis,答案可能是 AppFabric 缓存。
希望这可以帮助