Azure托管工作流活动与持久性的Windows8推送通知

时间:2012-08-14 02:52:38

标签: azure windows-8 workflow-foundation-4

我完全不熟悉Windows Azure和Windows Workflow的范围。

但基本上,我正在尝试实施的是云网络应用程序,它将负责将磁贴更新/徽章/ Toast通知推送到我的Winodws 8应用程序。

运行以发送磁贴通知等的代码很好,但需要每小时左右执行一次。

我认为最直接的方法是创建一个具有WebAPI的MVC应用程序,此WebAPI将负责从ModernApplication接收发送给它的ChannelURI,并将存储在SQL Azure上。

然后会有一个具有静态方法的类,该方法用于收集新数据并生成新的Tile / Badge / Toast的逻辑。

我创建了一个简单的Activity工作流,​​它有一个带有DoWhile(true)活动的Sequence。在DoWhile的主体内部,包含一个具有InvokeMethod和Delay的Sequence,InvokeMethod将调用包含静态方法的类。延迟时间设置为一小时。

所以这似乎一切都好。然后我通过Global.asax中的Application_Start使用以下行启动此活动:

    this.ActivityInvoker = new WorkflowInvoker(new NotificationActivity());
    this.ActivityInvoker.InvokeAsync();

所以我只是测试了它,它似乎是在设定的时间间隔运行我的自定义静态方法。

这一切都很好,但现在我有三个与这种处理方式有关的问题:

  • 这是正确/最好的方法吗?如果没有,我应该考虑一些其他方式。
  • 如果在Azure上启动了一个新实例,我如何确保两个实例的正在运行的工作流不会互相踩踏?即如何确保InvokeMethod不会运行两次,我只希望它每小时运行一次,无论有多少实例。
  • 如果实例崩溃/停止维护状态,我该如何确保?

非常感谢任何帮助,指导等。

1 个答案:

答案 0 :(得分:-1)

我很乐意回答几个好问题,但是在这样的论坛上尝试做一些很难。但是,让我们给它一个裂缝。至少从一开始。

1)您实施计划任务的方法没有任何问题。我可以想到其他一些方法。就像使用Do {Thread.Sleep();运行一个简单的Worker角色一样......}简单但有效。还有更复杂/更优雅的方式,包括使用外部库和框架来安排Azure中的任务。

2)您需要在工作流/作业处理引擎中实现某种Singleton类型模式。例如,您可以在作业开始时获取1Kb blob记录的租约,而不允许其他实例启动等。

如需更详细的解答,我建议我们离线并拨打Skype电话,详细讨论您的要求。你知道如何通过电子邮件抓住我:)期待它。