ASP.NET 4应用程序中的双应用程序域

Dlo*_*ker 18 asp.net iis-7 appdomain .net-4.0

我有一个在具有多个应用程序域的IIS 7上运行的ASP.NET应用程序,我无法理解为什么在一个进程中有多个应用程序域.我已经使用了我的代码库,而且我没有明确地创建第二个应用程序域.回收可能没有超时吗?

  • 这些双域将持续一段时间.
  • 如果由于Web配置或二进制更改而发生回收,则两个应用程序域都将关闭,并且将启动两个新的应用程序域.
  • 这些服务器每天都有几个二进制补丁和IISResets - 有时有2个域,有时只有1个.
  • Web园艺被禁用.
  • 我之所以发现这是因为应用程序中有一个定时器让人心跳加速,并注意到有一天服务器有两次心跳.

在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
Run Code Online (Sandbox Code Playgroud)

sma*_*man 7

  1. 即使您没有创建AppDomain,您正在使用的库也可能是.您使用的是哪些第三方组件?您是否有任何可能负责的Inversion of Control或动态代理库?以下是对Castle发生这种情况的解释.

  2. 您确定该应用程序仅在IIS中的一个位置运行吗?可以让多个IIS站点/应用程序运行相同的文件.这与(1)从数据库而不是应用程序获取调试信息以及(2)由于编辑web.config一致导致重复域的回收一致.如果一个位置比另一个位置更常见,这可以解释为什么有时只有一个位置AppDomain.

  3. 如果您正在利用ASP.NET的动态编译和卷影复制功能,ASP.NET有时会有多个AppDomains.Jim Schubert写了一篇名为ASP.NET,AppDomains和阴影复制的文章,它更详细地解释了这一点,并就如何修改web.config以定制它提出了一些建议.他还有一个有用的答案:如果我覆盖DLL,我的ASP.NET应用程序是否会停止执行? 可以通过设置禁用阴影复制<hostingEnvironment shadowCopyBinAssemblies="false" />.

更新

我迷上了Jim Schubert的博客,最后阅读了关于仅允许一个.NET应用程序的单一实例的这篇不相关的帖子.如果所有其他方法都失败了,您可以使用此方法确保只运行一个应用程序实例.


mo.*_*mo. 2

可以看看你的ApplicationHost.config.

看一下:maxProcesses应该是1。

您的 IIS 似乎启动了多个工作进程。