假设我的 IIS8 托管网站已启动并运行,并且能够顺利处理请求。现在,从提升的 Powershell 运行:
Stop-WebSite <MyWebSite>
直到最近,我都认为 IIS 会停止处理新请求,完成当前请求,然后正常停止网站。但是,我怀疑情况并非总是如此:我的应用程序中有这样的代码路径:
Log("Begin");
try
{
DoSomething(); // can take a few seconds
}
finally
{
Log("End");
}
偶尔,我的日志中会出现“Begin”条目,但没有匹配的“End”。Stop-WebSite 是否有可能强行杀死宿主进程?
答案1
运行这个简单的测试时:
int ms = 2000;
try
{
Log("1");
Thread.Sleep(ms);
Log("2");
Thread.Sleep(ms);
Log("3");
Thread.Sleep(ms);
Log("4");
Thread.Sleep(ms);
Log("5");
}
finally
{
Log("6");
}
并在我调用该页面一秒后停止网站,我总是得到所有六个日志条目。
因此,一般来说,您(和我)最初的假设是正确的,运行过程在网站关闭之前就已经完成了。
某个请求可能无法完成,这是不可能的吗?如果它运行了几个小时怎么办?如果出现问题并且工作进程挂起怎么办?
我会寻找其他原因导致您的“Log(“End”);”不起作用。