我正在写一个网络服务,并有以下观察: 即使我只是将文本文件添加到存储webservice引用的所有dll的目录(bin)中,appdomain也会刷新。
这会导致存储在词典中(在其中一个dll中)的所有用户会话都被删除。
例如,如果上面的字典包含在一个dll中,比如sessiondict.dll,而我正在替换另一个对sessiondict.dll没有任何依赖性的dll,那么为什么这些数据会丢失?
我错过了什么吗?
修改
虽然我正在阅读有关AppDomain重启的更多信息,但是,还没有弄清楚为什么设计是这样的,即使在bin文件夹中添加文本文件也会导致appdomain重新启动。
答案 0 :(得分:2)
这是标准行为 - 只要触摸bin目录中的任何内容(以及web.config等其他位置),您的appdomain就会回收。
您不应将数据存储在bin目录中。您还应该知道,默认情况下,IIS会定期回收应用程序域,除非您已经告知过它(默认情况下我认为每天一次)。
由于无论如何都无法替换某个应用程序的一部分,我不确定这样做的正当理由是什么?
This post可以很好地解释导致AppDomain回收的原因。
答案 1 :(得分:0)
Dictionary
存储在本地变量中,该变量位于App域内的内存中。
在bin文件夹中更新内容时,AppDomain将被回收。回收意味着.NET卸载现有的AppDomain(擦除存储在所有已加载类中的所有本地varriable使用的内存)并构造新的AppDomain并启动新类(可能会在代码中创建一个空的Dictionary
)。
DLL是否改变无关紧要。 Class
的实例被销毁,因为ASP.NET认为bin文件夹中的任何更改都会影响配置,并且应该使用新配置重新启动站点。
要解决此问题,您可以: