【问题标题】:Why does IIS accept requests before RoleEntryPoint.OnStart returns?为什么 IIS 在 RoleEntryPoint.OnStart 返回之前接受请求?
【发布时间】:2011-06-15 10:00:07
【问题描述】:

我在 Compute Emulator 上使用 Azure 示例 from here,我发现如果我在继承自 RoleEntryPoint 的类中创建 OnStart() 相当慢,则返回 Web 角色中的 .aspx 页面甚至接受 HTTP 请求在OnStart() 返回之前。

我觉得很困惑 - 为什么 IIS 会接受对尚未启动的角色的请求?

【问题讨论】:

  • 嗯,根据我的经验,Compute Emulator 是 Azure 云中行为的一个相当松散的复制品。所以这个怪癖确实意味着你将在云上体验到同样的体验。
  • 实际上我在部署时也遇到了同样的问题(即角色接受实例时仍然很忙):social.msdn.microsoft.com/Forums/windowsazure/en-US/…

标签: windows iis azure cloud azure-web-roles


【解决方案1】:

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

您当然可以要求 LB 忽略 Ready 状态,即使在忙碌时它也会路由 - 这是通过在端点上指定 ignoreRoleInstanceStatus="true" 来完成的。

【讨论】:

  • 拥有ignoreRoleInstanceStatus=true 是否还有其他含义??
  • 如果您在端口 80 上执行此操作,则意味着用户将在准备好之前访问您的 Web 实例,并且他们将收到来自 IIS 的错误(503 或其他)。对于不一定与角色状态相关的端口(例如 RDP 3389),它更有意义。
猜你喜欢
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多