多个用户可以共享一个 HttpApplication 实例吗?

3
我已经使用这篇文章开头的表格作为参考。我有三个问题:
1 - 多个用户(来自不同的物理位置)是否可以共享一个HttpApplication实例?如果可以,这是默认情况下发生的吗?
2 - 多个用户(来自不同的物理位置)是否可以共享一个HttpApplicationState实例?如果可以,这是默认情况下发生的吗?
3 - ASP.NET应用程序的多个用户是否可以共享单例实例或静态变量值?如果可以,这是默认情况下发生的吗?
感谢您澄清这些问题。
2个回答

6

你的所有六个问题的答案都是肯定的。

每个用户的状态应该存储在会话中。


1
是的,我确定。HttpApplication 是全局状态。 - SLaks
1
谢谢。原来我做了几件非常非常错误的事情,现在我明白为什么了。 - smartcaveman

2

HttpApplication对象包含每个w3svc.exe实例下的Asp.Net应用程序状态。因此,对于应用程序中的每个Web服务器,都会存储应用程序状态。如果您使用Web Gardening,则需要注意HttpApplication对象的其他问题。

在同一服务器上、同一线程上的所有用户将共享HttpApplication、HttpApplicationState和所有静态变量值。当多个HttpApplication实例在服务器上运行时,同时访问的用户将不会访问这些对象的同一个实例。我不建议在这些对象中存储值...最好的做法是使用Cache对象来存储您希望跨服务器共享的值。

Cache对象

Cache对象可以使用依赖项和过期时间值...这将允许您控制存储在服务器上的值的新鲜程度。

每个用户的值应存储在Session对象中。

Session对象


1
+1,感谢你的回答。这非常有帮助,但我觉得SLaks最直接、最简洁地回答了实际问题。 - smartcaveman
1
np.. 只是想确保您了解在Asp.Net中尝试存储和访问用户会话之间的变量时有哪些其他选项可用。 - Jeff Fritz
1
@JeffFritz 当在同一服务器上进行池化时,是否保留HttpApplication状态?因为我读到ASP.NET实际上管理一个HttpApplication对象池以服务请求。这里:http://msdn.microsoft.com/en-us/library/a0xez8f2%28v=vs.71%29.aspx - Ghasan غسان
1
是的@Ghasan,您是正确的,IIS可以创建多个HttpApplication。它会根据需要创建尽可能多的实例来管理服务器上的并发请求,这个数字可以在1-100的范围内。有关HttpApplication实例的更多信息,请访问:http://support.microsoft.com/default.aspx?scid=kb;en-us;312607 - Jeff Fritz
我之前一直使用HttpContext.Current.Application,但现在看来.Cache可能更好。不过有一个问题,如何强制清除整个缓存? - lathomas64
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接