我有一个用 C# ASP.Net MVC4 编写并在 Windows Azure 网站上运行的应用程序。我想编写一个服务/工作来执行以下操作:
1. 从网站数据库中读取用户信息
2. 构建用户明智的网站活动摘要
3. 生成包含每个用户帐户摘要的 HTML 电子邮件
4.定期向每个用户发送此类电子邮件
我是 Windows Azure 云服务的新手,想知道实现上述目标的最佳方法/解决方案。
我有一个用 C# ASP.Net MVC4 编写并在 Windows Azure 网站上运行的应用程序。我想编写一个服务/工作来执行以下操作:
1. 从网站数据库中读取用户信息
2. 构建用户明智的网站活动摘要
3. 生成包含每个用户帐户摘要的 HTML 电子邮件
4.定期向每个用户发送此类电子邮件
我是 Windows Azure 云服务的新手,想知道实现上述目标的最佳方法/解决方案。
您在正确的轨道上,但是... 请记住,工作角色(或 Web 角色)基本上是 Windows Server VM 的蓝图,并且您运行该角色定义的一个或多个实例。而且那个虚拟机,就像在本地运行的 Windows Server 一样,可以同时执行一堆任务。所以......没有必要仅仅为了每小时发送电子邮件而创建一个单独的工作角色。想一想:近一个小时,它将处于闲置状态,而您将为此付出代价(无论您启动的角色有多少实例,您都不能将其降至零 - 您总是需要至少一个实例)。
但是,如果您在现有工作人员或 Web 角色上创建一个线程,该线程仅休眠一个小时,然后进行电子邮件更新,您基本上无需额外成本即可获得此功能(并且您应该希望对其他任务造成最小的影响在该 web/worker 角色的实例上运行)。
您需要做的一件事,独立于单独的角色或重用角色:为多个实例做好准备。也就是说:如果您有两个角色实例,它们都将运行代码以每小时检查一次。因此,您需要一个方案来防止两个实例执行相同的任务。这可以通过多种方式解决。例如:使用一个保持不可见一小时然后出现的队列消息,并且您的代码可能每分钟检查一次队列消息(并且第一个得到它的人会每小时执行一次)。或者也许运行quartz.net。
我不知道邮政,但它似乎是正确的组合。