Windows 为什么IIS在RoleEntryPoint.OnStart返回之前接受请求?

Windows 为什么IIS在RoleEntryPoint.OnStart返回之前接受请求?,windows,iis,azure,cloud,azure-web-roles,Windows,Iis,Azure,Cloud,Azure Web Roles,我在Compute Emulator上玩Azure示例,发现如果我在继承自RoleEntryPoint的类中使OnStart()返回.aspx页面的速度相当慢,则web角色甚至在OnStart()返回之前就接受HTTP请求 我发现这相当令人困惑-为什么IIS会接受对尚未启动的角色的请求?模拟器没有100%模拟负载平衡器。对于云,当您的角色在OnStart()中时,会向LB报告您正忙,不会向其发送任何流量。一旦从OnStart()返回true,将需要几秒钟左右的时间,但只有到那时LB才会开始路由到

我在Compute Emulator上玩Azure示例,发现如果我在继承自
RoleEntryPoint
的类中使
OnStart()
返回.aspx页面的速度相当慢,则web角色甚至在
OnStart()
返回之前就接受HTTP请求


我发现这相当令人困惑-为什么IIS会接受对尚未启动的角色的请求?

模拟器没有100%模拟负载平衡器。对于云,当您的角色在OnStart()中时,会向LB报告您正忙,不会向其发送任何流量。一旦从OnStart()返回true,将需要几秒钟左右的时间,但只有到那时LB才会开始路由到它。您可以通过在OnStart()中进行跟踪并在其中放入一个大Sleep()来测试这一点。您将无法访问您的实例(通过非延迟端口)


当然,您可以要求LB忽略就绪状态,它甚至在繁忙时也会路由—这是通过在端点上指定ignoreRoleInstanceStatus=“true”来完成的。

Hum,根据我的经验,Compute Emulator是Azure云内行为的一个相当松散的复制。所以这个怪癖确实意味着你在云上也会遇到同样的问题。事实上,我在部署时也会遇到同样的问题(即在仍然忙碌的情况下接受角色的实例):让
ignoreRoleInstanceStatus=true
有任何其他影响吗?如果你在端口80上这样做,这意味着用户将在准备就绪之前访问您的web实例,并且他们将收到来自IIS(503或其他)的错误服务。对于不一定与角色状态关联的端口(例如RDP 3389),这更有意义。