2

我想知道.NET 环境中是否存在有效的会话或静态。我需要的是一个变量来存储一些维持其值的数据,可以通过所有 ASP.NET 页面/C# 表单访问,但对于使用该应用程序的所有用户来说并不是唯一的

4

6 回答 6

2

我认为您正在寻找应用程序状态而不是应用程序缓存。应用程序状态的工作方式与会话状态相同,但会在所有会话之间共享。

示例用法:

 Application["Message"] = "Welcome to my Website"; 

更多信息: http: //www.codeproject.com/Articles/87316/A-walkthrough-to-Application-State

于 2013-01-04T16:07:03.617 回答
2

那么您的答案很可能是应用程序缓存。看看 System.Web.Caching

由于有一些关于缓存对象生命周期的讨论,您可以设置它。用户没有具体说明,但它必须存活多长时间。在应用程序回收之间?在单个实例的生命周期内,是否需要在实例之间。缓存将适用于最简单的要求。

于 2013-01-04T15:54:41.537 回答
1

你可以使用应用程序缓存吗?它为整个应用程序中的所有用户共享,可从所有页面访问,并且每个用户不是唯一的。

有关如何使用缓存 API 的更多详细信息,请参阅

于 2013-01-04T15:57:22.973 回答
1

您可以尝试使用应用程序范围的变量来处理这个问题。

首先在 Global.asax 文件中,添加以下内容:

void Application_Start(object sender, EventArgs e)
{
    [Other Stuff Already Here Omitted]
    Application["MyVariable"] = "My Default value";
}

然后在任何页面上,您都可以访问:

var myVar = Application["MyVariable"];
于 2013-01-04T16:04:38.287 回答
0

您可以将类公开为静态。这将使它在所有会话中可用,但仅限于该应用程序实例。

于 2013-01-04T15:58:37.440 回答
0

答案是不。在那个级别上不存在“.Net 环境”。您的 .Net 代码也从主机获得运行时限制。让我们定义两个主机(还有更多):IIS 和“简单的主 exe”。

对于 IIS 托管代码,您在主机创建线程(或者更确切地说分配一个线程)并在该线程上执行您的代码的环境中运行。主机本身定义何时以及是否重置进程。您不能,或者更确切地说,不应该假设关于哪个进程或线程正在执行您的代码。当您谈论农场中的 iis 时,这会得到增强。

对于 exe 中的简单主代码,操作系统会创建进程和初始第一个线程,并将执行指针设置为主函数中的第一条语句。

“静态”在拥有过程的整个生命周期内保持状态,这是 .Net 给您的保证。

“会话”是处理比静态属性更多的特定实现。

我建议您在描述您的主机时对问题进行改进。对于 iis,答案可能是 AppFabric 缓存。

希望这可以帮助

于 2013-01-04T16:09:35.250 回答