C# 如何使用云服务(web角色)实现主动/被动模式?

C# 如何使用云服务(web角色)实现主动/被动模式?,c#,.net,azure,azure-cloud-services,C#,.net,Azure,Azure Cloud Services,我有一个web角色在后台线程中执行一些后台处理 我希望运行web角色的多个实例,但我只希望其中一个实例处理后台作业。如果运行后台处理的指定实例由于某种原因停止工作,我希望另一个实例代替它 在Azure中实现这一点最简单的方法是什么 我考虑定期检查RoleEnvironment.Roles中角色对象的实例集合,并且仅当当前实例的Id最小时(或使用其他一些启发式方法确定),才运行后台线程,因此只有单个实例会处理后台作业。 这种方法有效吗?角色实例之间是否相互通信心跳,并且实例集合是否相应更新?您可以

我有一个web角色在后台线程中执行一些后台处理

我希望运行web角色的多个实例,但我只希望其中一个实例处理后台作业。如果运行后台处理的指定实例由于某种原因停止工作,我希望另一个实例代替它

在Azure中实现这一点最简单的方法是什么

我考虑定期检查
RoleEnvironment.Roles
角色
对象的
实例
集合,并且仅当当前实例的Id最小时(或使用其他一些启发式方法确定),才运行后台线程,因此只有单个实例会处理后台作业。
这种方法有效吗?角色实例之间是否相互通信心跳,并且
实例
集合是否相应更新?

您可以尝试使用来控制实例

所有实例都试图获取锁,而第一个实例获得了锁。其余部分正在后退,稍后再检查。处理实例可以续订锁。这样,如果您的处理实例将失败(甚至是硬失败),租约将在租约时间过后释放,下一个实例可以获得锁并开始处理

如果您将依赖Id最小的
实例
,那么您可能会遇到这样的情况:您的实例已启动并正在运行,但后台处理线程已挂起/终止

看看这里

更新:

为什么不使用工作者角色来运行您的后台任务?是的,这将是一件简单的事情,但是我们的客户端明确要求只有一个web角色,因此不需要额外的实例,因为额外的工作者角色。您的后台任务将持续多长时间?Web角色(在IIS中托管您的后台任务)可能会有问题-IIS可以取消线程,应用程序池可能会被回收等。每个都需要几秒钟或几分钟,所以这可能不会是一个问题。我实现了这一点,它似乎工作得很好。谢谢我知道有点晚了,因为您已经实现了它,但模式和实践描述了整个模式