0

首先我为什么要这样做:
我有一个 WCF 服务部署为使用 HTTPS 作为端点的 Azure Webrole。我需要为此服务设置一个自定义的“负载平衡器探测”。Azure 负载均衡器不支持 HTTPS,因此我部署了第二个带有 http 端点的网站,将其用作我的“负载均衡器问题”

所以我的问题是什么?!
我有两个网站,例如:

<WebRole name="WebRole1" vmsize="Medium">
 <Sites>
   <Site name="Web" physicalDirectory="roles\WebRole1">
     <Bindings>
       <Binding name="Web" endpointName="WebRoleEndpoint" />
     </Bindings>
   </Site>
   <Site name="Web2" physicalDirectory="roles\HealthProb">
     <Bindings>
       <Binding name="Web" endpointName="HealthProbEndpoint" />
     </Bindings>
   </Site>
 </Sites>
 ...

建议处理 RoleEntryPoint.OnStop() 以确保将正确的健康状态代码返回到负载均衡器(http://blog.mdavies.net/2013/04/27/custom-load-balancing-endpoints-azure -web-worker-vm-role/
我的问题是如何在我的第二个网站中处理 RoleEntryPoint.OnStop() 。虽然在 webrole 中我可以通过扩展和覆盖 RoleEntryPoint.OnStop() 轻松做到这一点,但在第二个网站中我无法处理该事件。

有什么方法可以处理第二个网站中的 OnStop 或类似事件?!

4

1 回答 1

0

VM 上运行的任何进程都可以订阅 RoleEnvironment 事件。只需在您的网站项目中添加对 Microsoft.WindowsAzure.ServiceRuntime.DLL 的引用,然后为该RoleEnvironment.Stopping事件添加一个处理程序。

但我建议不要使用自定义负载均衡器探测,而是在您的网站中使用 RoleEnvironment.StatusCheck 事件。自定义负载均衡器探测的目的是允许您监视 w3wp 进程的运行状况,因为 Azure 运行时通常不会监视此进程。但是,如果您正在部署一个单独的站点来实现自定义 LB 探测,那么您实际上并没有监控您的主要 w3wp 进程。在这种情况下,最好只使用可以实现 LB 逻辑的 StatusCheck 事件,然后免费获得 Stopping/OnStop 行为。

于 2014-08-14T22:38:28.310 回答