2009-08-21 66 views
2

我正嘗試在WSS 3.0中創建一個計時器作業。我的計時器作業將使用存儲在任何xml或數據庫中的GUID創建SPsite對象,然後創建SPWeb對象,然後創建SPDocumentLibrary對象(或可能是圖片庫)。之後,它將在某些第三方應用程序中備份文檔庫中的文檔,然後刪除這些文件。SharePoint:Timerjobs鎖定類型

所以我的問題是:什麼應該是我的SPJobLockType'None'或'Job'或'ContentDatabase'理想?以下是我閱讀一些關於計時器工作的文章後的理解。如果我錯在什麼地方,因爲我很新到SharePoint

  1. 如果我使用「無」,然後我的工作將場中的每個服務器上運行,請大家指正。我真的需要嗎?因爲我的工作只是修改/刪除文檔(我只通過計時器作業來修改內容數據庫,如果我錯了,請糾正我)。

  2. 如果我使用鎖定類型「作業」,那麼我的作業將只在執行作業創建代碼的服務器上運行。但它可以滿足我的要求(我這麼認爲,但我不確定請糾正我,如果我錯了)。

  3. 我已經通過this文章ContentDatabase LockType..It去說

總之

,它幾乎一樣的 工作之一,這意味着它只能運行一個 服務器..但是..彼得發現在 幫助需要與自定義計時器作業 SharePoint 2007年,作業運行 每個ContentDatabase WebApplication與關聯。 另一個(很煩人的)事實是, 它不會在下一個內容數據庫上運行 。

請給出您的想法/建議。

回答

4

Anoop,

的「掃蕩」式計時器作業你描述的是一個相當普遍的一個,我已經寫了一些他們的自己爲不同的項目。在這種類型的計時器作業中,您正在處理一組網站,網頁或列表以執行某種維護。一次處理一個站點/ Web /列表通常是最容易的,並且正在執行的任務不是需要以最快速度執行的類型(也就是說,需要併發/多線程處理模型快速完成)。

在這種類型的場景中,我通常構建計時器作業以使用SPJobLockType爲「Job」。如您所述,這可確保在場內的任何給定時間只有一個計時器作業實例正在運行。這避免瞭如果多個實例以SPJobLockType「None」運行時發生的衝突,並且還避免了與「ContentDatabase」的SPJobLockType關聯的操作機制(至少我覺得令人困惑)。

下面是我在CodePlex上編寫併發布的計時器作業的鏈接。它執行您所描述的相同類型的掃描(略高一級):http://blobcachefarmflush.codeplex.com/SourceControl/changeset/view/53851#797787。定時作業的一個實例是在FeatureReceiver創建與下面的代碼行:

BlobCacheFarmFlushTimerJob newJob = new BlobCacheFarmFlushTimerJob(jobName, housingWebApp, null, SPJobLockType.Job); 

根據我的你寫的瞭解,我相信「招聘」的SPJobLockType將是適當的。您希望確保一次只運行一個作業實例(以防止同一作業的兩個或更多實例嘗試處理相同的SPSite)。

我希望有幫助!