我希望你能在这里帮助我,因为我已经尝试在另一个论坛上找到一些答案(看这里)这个问题是基于 Scott Forsyth 的回复这里。
在 IIS 管理器中向“默认网站”添加新的虚拟目录时,默认网站中的所有其他应用程序都会以某种方式被回收。为了简化我的问题,我举了一个例子,其中我可以跟踪当前会话的时间戳,并意识到在添加 VD 后会话信息确实丢失了,这意味着 AppDomain 被回收了。
情况如下:
站点
Default Web Site
1 (virtual directory) (d:\TestAppDomains\1\)
- app1 (Application) (using App Pool 1)
2 (virtual directory) (d:\TestAppDomains\2\)
- app2 (Application) (using App Pool 2)
据我所知,添加虚拟目录只是对 applicationHost.config 进行更改,这不会导致 AppDomains 回收。也许这是一个委托问题,但我想我还不够理解 :(
是否有任何属性会影响此行为?我已将 AppPool 设置设为在配置更改后不回收,但这没有帮助。
如果你能帮助我解决这个问题,我将非常感激,因为我已经为此奋斗了将近 6 个月。
当然,如果您需要的话,我很乐意提供更多信息。
更新 1:
HealthMonitoring 无法帮助我解决这个问题,原因有二:
- 找不到 AppPool 回收的任何条目,它应该在哪里?事件查看器 -> Windows 日志/应用程序和服务日志?(应正确配置)
- 也许我搞错了。一开始我以为这是一个应用程序池回收,但通过简化的测试,我构建了一个没有任何应用程序和额外应用程序池的示例。现在它看起来就像这样:
站点
Default Web Site
1 (virtual directory) (d:\TestAppDomains\1\)
session1.aspx (Sets current timestamp to session variable and redirects to session2.aspx)
session2.aspx (displays session variable)
通过调用 localhost/1/sessions1.aspx,我可以看到时间戳。添加第二个虚拟目录(例如“2”(d:\TestAppDomains\2))并刷新页面后,会话消失,这意味着变量为空。
干杯,亚当
答案1
我遇到了和你描述的一样的情况IIS 论坛:一个网站,多个应用程序池,多对应用程序(Web 服务)和虚拟目录(html + js),自动部署等等。
问题是相同的:当我添加/删除虚拟目录时,所有应用程序都会重新启动。这不好,因为我计划提供多个版本,并希望用户在部署新版本时工作。
我尝试过设置委派,但没有成功。然后我注意到添加/删除一个应用程序不会导致其他应用程序重新启动。
所以,这是解决方案:为网页创建单独的应用程序而不是虚拟目录。
答案2
如果您有 ASP.NET应用程序域重新启动,原因在这里详细介绍:
你有应用程序池回收事件日志记录是否已启用?这将是我首先要开始的地方:
如果您有 ASP.NET 应用程序,您还可以在 web.config 的 system.web 部分中启用 HealthMonitoring。这些日志记录选项可能有助于识别正在发生的事情。示例:
<system.web>
<healthMonitoring enabled="true" heartbeatInterval="1">
<rules>
<add name="HeartBeat"
eventName="Heartbeats"
provider="EventLogProvider"
profile="Default"
minInstances="1"
minInterval="00:01:00"
maxLimit="Infinite"/>
<add name="App Lifetime"
eventName="Application Lifetime Events"
provider="EventLogProvider"
profile="Default"
minInstances="1"
minInterval="00:00:00"
maxLimit="Infinite"/>
</rules>
</healthMonitoring>
常见问题解答 - ASP.NET 2.0 中的健康监测
http://forums.asp.net/t/1027461.aspx/1
healthMonitoring 元素(ASP.NET 设置架构)
http://msdn.microsoft.com/en-us/library/2fwh2ss9%28v=vs.100%29.aspx