恐怕您在后台运行任务的方法是不可能的。我可以确认您无法在异步委托中访问 SP OM 或在单独的线程上运行。我猜这是因为沙盒解决方案中的资源使用受到监控和限制。例如,您不得在未处理它们的情况下留下物品。
不仅不允许您SPSite
使用string
or创建对象Guid
;您也不(SPSite)properties.Feature.Parent
能将事件接收器中可用的对象传递给委托。(对象的所有属性都会抛出相同的异常。)
一般来说,我认为你的解决方案太脆弱了。在传统的解决方案中,您的代码将在w3wp.exe
进程中运行,并且在激活您的功能后第一个应用程序池回收将终止计时器(整个应用程序域)。同样,在沙盒解决方案中,您将受到SPUCWorkerProcess.exe
. 您需要一些能够每天可靠地执行您的代码的服务主机。
沙盒解决方案和/或 SharePoint Online 不提供后台运行服务的功能。您必须在其他地方运行您的代码,例如:
如果允许您至少部署一个小型场解决方案,则可以将列表项更新代码部署为 SP 计时器作业。
如果您有能力一直运行 Windows 机器,您可以使用 SP Client OM 编写列表项刷新代码,并将其安装为Windows 服务(计时器循环)或Windows 计划任务(定时启动)。(后者更简单。)
如果您的解决方案应该在 SharePoint Online 中运行并且您不能依赖本地 Windows 计算机,您可以将其部署为Microsoft Azure 中的托管服务(工作角色)。
您可以实现定期更新功能,以便在沙盒解决方案中按需运行 - 例如,作为 ASPX 页面。然后,您将通过pingler或webcron等公共服务触发执行代码的资源的 URL 。
实际上,选项 1 - 3 可以按照与选项 4 相同的方式编写——根据调度程序的性质,在沙盒解决方案中定期执行的代码和触发代码(非常短且独立于 SP)分开——甚至可以使用由 cron 调度的 LWP 的 perl 脚本。
--- 费尔达