第一个原因:
我有一个WCF服务部署为使用HTTPS作为端点的Azure Webrole。我需要为这个服务设置一个自定义的"负载平衡器探测"。Azure负载均衡器不支持HTTPS,所以我已经部署了第二个网站与http端点使用它作为我的"负载均衡器问题"
那么我有什么问题?!
我有两个网站,如:
<WebRole name="WebRole1" vmsize="Medium">
<Sites>
<Site name="Web" physicalDirectory="rolesWebRole1">
<Bindings>
<Binding name="Web" endpointName="WebRoleEndpoint" />
</Bindings>
</Site>
<Site name="Web2" physicalDirectory="rolesHealthProb">
<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或一些类似的事件?!
虚拟机上运行的任何进程都可以订阅RoleEnvironment事件。只需在您的网站项目中添加对microsoft . windowsazure . servicertime . dll的引用,然后为RoleEnvironment.Stopping
事件添加处理程序。
但是,与其使用自定义负载平衡器探针,我建议只使用RoleEnvironment。StatusCheck事件在您的网站。自定义负载平衡器探测的目的是允许您监视w3wp进程的运行状况,因为Azure运行时通常不监视此进程。但是,如果您部署一个单独的站点来实现自定义LB探测,那么您实际上并没有监视您的主w3wp进程。在这种情况下,你最好只是使用StatusCheck事件,可以实现你的LB逻辑,然后你得到停止/OnStop行为免费。