我有一个在IIS7上运行的具有多个应用程序域的ASP.NET应用程序,我不明白为什么在一个进程中有多个应用程序域。我已经准备好了我的代码库,并且我没有显式地创建第二个应用程序域。有没有可能回收无法超时?
在windbg中,!dumpdomain向我显示以下结果:(过滤后仅显示应用程序域名):
Line 59: Name: None
Line 66: Name: None
Line 372: Name: DefaultDomain
Line 460: Name: /LM/W3SVC/1/ROOT/MyAppDomain-1-129882892717131250
Line 4437: Name: /LM/W3SVC/1/ROOT/MyAppDomain-4-129285605131450579
发布于 2012-06-15 09:13:12
AppDomain
,但您正在使用的库可能是。您使用的是哪些第三方组件?您是否有任何可能负责的控制反转或动态代理库?这里解释一下发生在Castle.web.config
导致重复的域而导致的回收是一致的。如果一个位置比另一个位置更常被访问,这可以解释为什么有时只有一个AppDomain
.AppDomain
。Jim Schubert写了一篇名为ASP.NET, AppDomains, and shadow-copying的文章,更详细地解释了这一点,并就如何修改web.config
以自定义这一点提出了几个建议。他还提供了一个有用的答案,可以通过设置<hostingEnvironment shadowCopyBinAssemblies="false" />
.来禁用Does my ASP.NET application stop executing if I overwrite the DLLs?卷影复制
更新
我沉迷于Jim Schubert的博客,并最终在Allowing Only A Single Instance of a .NET application上阅读了这篇无关的文章。如果所有其他方法都失败了,您可以使用此方法来确保只有一个应用程序实例在运行。
发布于 2012-06-13 06:46:25
可以看看你的ApplicationHost.config
。
看一下:maxProcesses
应该是1。
您的IIS似乎启动了多个工作进程。
发布于 2016-01-05 18:10:22
正如另一个线程中的答案https://stackoverflow.com/a/3318367/2001769所建议的那样,ASP.NET运行时似乎保留了一个HttpApplication实例池(与maxProcesses /网络花园无关)。
我不知道是否有可能,甚至是可取的,来控制这个池子。最佳实践可能是实例化Application_Start事件中的所有应用程序单例,该事件应该每个应用程序只运行一次,而不是每个池化的HttpApplication实例运行一次。
https://stackoverflow.com/questions/10922975
复制相似问题