我有一个我今天遇到的问题,我希望有人可以回答。我可能会遗漏一些东西而且我现在没有在我面前的代码,所以我记得这一点。
我有一个.NET MVC Web应用程序,它有两层,一个UI层和一个服务层(WCF服务)。 UI层具有对WCF服务的服务引用。
UI层将一些数据缓存到global.asax文件中的Application_Start上的静态变量中。这些静态变量位于引用的共享类库中的一个类中。
我的WCF层也引用了这个类库和提到的静态变量。
这两个层都安装在不同的服务器上,因此位于自己的IIS实例下。
我的WCF服务有没有办法访问UI层填充的静态变量中的数据?我原本认为服务层有自己的引用程序集实例,因此其中的变量只属于它自己?
我问的原因是这个。曾经在服务层上有一个global.asax文件,我最近删除了该文件,它也用于填充共享库中的静态变量。
在从服务层完全删除此global.asax文件后,它仍然能够访问由UI层填充的数据(至少我认为是这样)。应用程序仍然会运行一段时间,当处于非活动状态时(我认为)服务层中的这些变量变为NULL并且我获得了空引用异常。
再次填充变量的唯一方法是重新启动UI层应用程序池。然后应用程序再次工作了一段时间,并重复了。
我不确定我所解释的是否可能在哪种情况下我会遗漏某些内容或者是否有人知道为什么会发生这种情况?
答案 0 :(得分:1)
静态变量仅在AppDomain中是静态的。当IIS关闭应用程序池时(由于不活动等),这些静态值将消失。
我将在WCF项目中引用静态变量,然后为WCF层添加服务以用于获取这些静态值。