我正在为托管在 Azure 中的 SharePoint (O365) 构建一个提供商托管的应用程序。我通过 CSOM 完成所有逻辑,更具体地说,使用 MVC Web 项目。目前,在 AJAX 调用控制器操作后,应用程序正在执行一些品牌逻辑。
如果我的层次结构中有很多子站点,这可能需要很长时间才能执行,这很糟糕,因为虽然应用程序仍会处理我的请求,但离开我调用该操作的页面会阻止我有任何关于任务完成情况的反馈。这当然是因为请求的状态直接与调用页面中该请求的回调相关联。这也意味着有人可以很好地启动请求,刷新页面,然后再次启动它,因为我无法判断之前的请求是否仍在执行。此外,2 个不同的用户可以启动相同的请求,导致该请求的逻辑同时执行 2 次。这两种情况都可能导致服务器端工件出现一些令人讨厌的并发修改错误。
所以,我需要找到一种方法来检查某个请求是否已经在运行,如果不是这样,启动一个有状态和异步的。我能想到的最好的例子就是 SharePoint O365 自己的长时间运行的任务机制:时间密集型任务(例如安装应用程序或创建新网站集)可以从页面启动,任何后续刷新或访问该页面都会将任务显示为当前正在运行,甚至有时提供取消它的可能性(例如在应用程序安装中)。状态也会自行更新(例如网站集创建完成时),我不确定这是客户端轮询的结果还是我不知道的其他机制。
我已经看到了一些看起来很有希望的解决方案,比如直接在 Azure 上使用 Windows 服务或这个穷人的计时器工作,尽管似乎没有一个解决方案能够满足我上面列出的所有要求和/或似乎很容易实现我想做的事情。我觉得 Timer Jobs 可能会有所帮助,但我想听听你对这种情况的建议。
感谢您的输入