【发布时间】:2010-09-21 11:48:50
【问题描述】:
当 IIS 重新启动 ASP.Net (2.0) Web 应用程序时,它可以:
-
回收 AppDomain:卸载 AppDomain 并在相同进程上加载新的 AppDomain(例如,当调用
HttpRuntime.UnloadAppDomain()时,当 web.config 更改时)。 - 回收进程:卸载 AppDomain 并在 new 进程上加载一个新进程(例如,通过 inetmgr 在 AppPool 上调用 Recycle 命令时,或达到内存限制时)。
由于一些内部原因(我们依赖的遗留原生代码存在问题),我们不能允许第一个选项。我们只是不能在同一个进程上两次加载应用程序。
能否以某种方式告诉 IIS 永远不允许工作进程重用?
我已经尝试通过跟踪应用程序是否已经在使用互斥锁的进程上启动过,如果是 - 在Application_Start() 期间抛出异常来防止它自己;我还尝试通过在Application_End() 期间调用Environment.Exit() 来终止进程。这两种方法的问题在于,它会导致在 Application_End 或 Application_Start 期间到达的任何请求失败(与手动进程回收不同,它绝对不会失败,因为它们会立即重定向到新进程)。
【问题讨论】:
标签: asp.net iis appdomain w3wp worker-process