我在Windows Azure中托管了一个WCF应用程序。它有IIS v8.0
我已将IProcessHostPreloadClient's
Preload()
方法用于应用程序预热
现在,我有两个问题:
1)每当我的应用程序池回收时,Preload()
函数被调用两次。我在preload()
方法中初始化了一些静态变量,这些变量将在我的工作进程(w3wp.exe)
中保留。
我所看到的很有趣:
我当前的工作流程ID
是(w3wp.exe 1234
,比如说)
在回收时,preload
被调用两次:
第一次:在w3wp.exe中有进程ID
:5678
,说(一个新的工作进程)
第二次:在w3wp.exe中有进程ID: 1234
(与现有进程相同)
现在,我已经配置了我的应用程序池,以便只存在一个w3wp.exe实例。因此,在发生循环之后,存在的w3wp.exe是进程ID:5678。
我的问题是,为什么有进程ID:1234的死亡w3wp.exe已执行预加载
两者之间有3毫秒的差距。
修改 我刚刚了解到,由于app-pool循环,一个旧的w3wp.exe终止并启动了一个新的w3wp.exe。 导致preload被调用两次的原因是:
1)w3wp.exe的新进程 - 导致在新进程上调用preload()(在我们的示例中为进程ID:5678)
2)w3wp.exe的旧进程(进程ID:1234):其app-domain在被杀死之前重新启动。因此,当重新启动app域时,会调用preload()
现在,我的问题是为什么一个垂死的w3wp.exe的app-domain重新启动了。它在接下来的3ms内即将死亡(如上所述)
2)我已经开始服务了,我正在做一些测试。在此期间,工作进程暂时没有提供任何请求。但我的w3wp.exe有一个连续运行的线程。
我们在一段时间之后观察到的是,w3wp.exe
(进程ID 1234,比如说)的现有实例突然结束,并且在同一进程中调用了preload()(进程ID为1234的w3wp.exe
)
我假设的是,出于某种原因,再次调用了预加载。我曾经认为只有在创建新的w3wp.exe时才会调用preload(反过来意味着应用程序池已经回收)
此行为被观察了两次 谁能告诉我任何关于它的事情
编辑
答案:偏爱:因为app-domain重启。我仍然不知道为什么app-domain重新启动