我对 Windows Azure 和 Windows 工作流范围的事物完全陌生。
但基本上,我要实现的是云网络应用程序,它将负责将磁贴更新/徽章/toast 通知推送到我的 Winodws 8 应用程序。
运行以发送磁贴通知等的代码很好,但需要每隔一小时左右执行一次。
我决定最直接的方法是制作一个具有 WebAPI 的 MVC 应用程序,这个 WebAPI 将负责从发送它的 ModernApplication 接收 ChannelURI,并将其存储在 SQL Azure 上。
然后将有一个具有静态方法的类,该方法执行收集新数据和生成新 Tile/Badge/Toast 的逻辑。
我创建了一个简单的活动工作流,它有一个带有 DoWhile(true) 活动的序列。在这个 DoWhile 的主体内部,包含一个具有 InvokeMethod 和 Delay 的序列,InvokeMethod 将调用我的包含静态方法的类。延迟设置为一小时。
所以这似乎一切都好。然后我通过 Global.asax 中的 Application_Start 使用以下行启动此活动:
this.ActivityInvoker = new WorkflowInvoker(new NotificationActivity());
this.ActivityInvoker.InvokeAsync();
所以我只是用它测试了它,它似乎在设定的时间间隔运行我的自定义静态方法。
这一切都很好,但现在我有三个关于这种处理方式的问题:
- 这是执行此操作的正确/最佳方法吗?如果没有,我应该研究哪些其他方法。
- 如果在 Azure 上启动了一个新实例,我如何确保两个实例的运行工作流不会互相踩踏?即我如何确保 InvokeMethod 不会运行两次,我只希望它每小时运行一次,而不管有多少实例。
- 如果实例崩溃/关闭,我如何确保它的状态保持不变?
非常感谢任何帮助、指导等。