我正在完成由之前的开发人员启动的功能。我注意到他在Global.asax Application_Start方法中从db加载设置,并将设置放入HttpContext.Current.Application [" SettingName"]。
在开发中,这在我的机器上运行良好。如果我没有弄错,虽然这看起来像是在制作中,它会在第一个用户启动应用程序时加载一次数据,但任何后续用户的应用程序都无法使用设置。
有人可以确认或否认我的怀疑吗?
答案 0 :(得分:2)
HttpContext.Current.Application["SettingName"]
是一个静态属性。它也可供下一个后续用户使用。但你不能轻易改变它,特别是如果你使用网络花园。
您可以在此处阅读更多详细信息:Using static variables instead of Application state in ASP.NET
我不知道设计是怎样的,但你可以使用一个简单的静态字典来直接从数据库中读取你的参数,或者从web.config。
答案 1 :(得分:1)
我建议您将设置放在web.config
文件中,然后使用ConfigurationManager
对象来读取这些设置。这样更简单,因为不需要将它们存储在HttpContext中。
e.g。
<configuration>
<appSettings>
<add key="SettingName" value="SettingValue" />
</appSettings>
</configuration>
这样做意味着整个ASP.NET应用程序都可以使用这些设置 - 无需将它们存储在HttpContext
中。
有一点需要注意,当您更新web.config文件时,ASP.NET站点的应用程序池将被回收。但这一切的后果都取决于该网站正在做什么,例如会话状态和缓存。重新安排应用程序池将重置那些,但这是另一个问题......
编辑:
根据评论,听起来session state会对您有所帮助。使用会话状态,您可以存储特定于用户的设置,以便它们不会干扰其他用户。
答案 2 :(得分:1)
我通常不会触及Application_Start
中的HttpContext。事实上,我认为IIS的集成管道甚至不会让你这样做。
使用集成管道,Application_Start
可能会在任何请求甚至命中服务器之前被触发,例如IIS 8的Application Initialization。