2014-10-10 11 views
1

我正在構建由Azure託管的SharePoint(O365)的提供程序託管應用程序。我通過CSOM完成我的所有邏輯,更具體地說,使用MVC Web項目。目前,在AJAX調用控制器動作之後,我有一些應用程序正在執行的品牌邏輯。使用Azure提供程序託管的應用程序在SharePoint O365中執行後臺任務/計時器作業

如果我的層次結構中有很多子網站,這可能需要很長時間才能執行,這很糟糕,因爲雖然應用程序仍會處理我的請求,但離開我稱爲該操作的網頁會阻止我沒有任何關於完成任務的反饋意見。這當然是因爲請求的狀態直接與調用頁面中該請求的回調有關。這也意味着有人可以很好地啓動請求,刷新頁面,然後再次啓動它,因爲我無法確定前一個請求是否仍在執行。此外,2個不同的用戶可以啓動相同的請求,導致同時執行該請求的邏輯。這兩種情況都會導致服務器端工件出現一些令人討厭的併發修改錯誤。

所以,我需要的是找到一種方法來檢查某個請求是否已經在運行,如果不是這種情況,請啓動一個有狀態且異步的方法。我能想到的最好的例子就是SharePoint O365自己的長時間運行任務機制:時間密集型任務(例如安裝應用程序或創建新的網站集)可以從頁面啓動,並且任何後續刷新或訪問該頁面顯示當前正在運行的任務,甚至有時會提供取消它的可能性(例如在應用程序安裝中)。該州還將自行更新(例如網站集創建完成時),我不確定這是客戶端投票或我不知道的其他某種機制的結果。

我已經看到了一些看起來很有前途的解決方案,例如使用Windows Services directly on Azurethis poor man's timer job,但似乎沒有滿足上面列出的所有要求和/或似乎complciated實現我想要做的。我有一種感覺,計時器工作可能會有所幫助,但我想就這種情況提出建議。

感謝您的輸入

回答

0

嘗試使用Azure工作者角色。使用CSOM並側重加載SharePoint提供程序託管應用程序和租戶完全控制權限。 Side-loading部分可讓您的工作人員讀取/寫入SharePoint Online。

側載通過/_layouts/appregnew.aspx和_layouts/appinv.aspx進行。

+0

我已經在使用完整的租戶範圍的應用程序,所以這是一個優點。最重要的是,我從來不知道appinv.aspx,看起來非常有趣,無論是對於這個問題還是其他問題。我會看看。 – 2014-12-01 20:38:02