2010-05-05 13 views
6

Immagino che l'avvio di un processo timer all'interno del codice richieda le credenziali di amministratore Farm. Tuttavia, ho bisogno di avviare un processo timer da una web part che verrà utilizzata in qualsiasi sito. Ora, quando provo ad avviare il lavoro, mi dà un errore di accesso negato, ovviamente perché l'identità del pool di app non è l'amministratore della farm. Qualche idea su come risolvere questo problema?Timer Job da un SPWeb

Grazie,

risposta

6

I lavori con timer vengono eseguiti come amministratore della farm e non devono essere attivati ​​direttamente da un utente finale. Poiché alcuni lavori possono richiedere molte risorse, solo l'amministratore della farm può creare nuovi lavori o modificare la pianificazione per i lavori esistenti.

Una soluzione consiste nell'utilizzare l'infrastruttura SPWorkItem per accodare le attività utente che vengono quindi elaborate da un processo timer personalizzato derivato da SPWorkItemJobDefinition. Il tuo webpart chiamerebbe SPSite.AddWorkItem per aggiungere l'oggetto di lavoro. Quando viene eseguito il processo timer, cercherà tutti gli elementi di lavoro con il GUID WorkItemType corrispondente e richiamerà il sovraccarico ProcessWorkItem.

3

Hai ragione. Per avviare un processo timer, l'utente del pool di app deve essere amministratore della farm. Poiché l'avvio di un processo timer richiede l'aggiornamento di un oggetto SPJobDefinition con un SPSchedule. Il SPJobDefinition è un SPPersistedObject che viene memorizzato nel Database di configurazione di SharePoint. Solo gli amministratori di farm possono scrivere in questo db.

Non vedo un modo per superare questo problema.

Soluzione: A seconda delle esigenze, è possibile scrivere un processo principale eseguito regolarmente. Questo lavoro potrebbe richiedere un elenco di SharePoint e avviare un altro lavoro definito da tale elemento di elenco. Poiché il lavoro principale viene eseguito con l'account Amministratore farm, il lavoro potrebbe essere in grado di avviare un nuovo processo timer.