L'accesso negato è un comportamento previsto in base a ciò che si sta tentando di fare. Permettimi di spiegare.
Quando viene creata un'istanza di lavoro timer, viene mantenuta nel database di configurazione della farm. L'accesso a questo database per scopi di scrittura è un'operazione privilegiata; come regola generale, solo l'account del servizio di farm (ovvero l'account in cui viene eseguito OWSTIMER.EXE) o gli account che dispongono esplicitamente dei diritti necessari per eseguire tale operazione sul database di configurazione (in genere gli amministratori) avranno esito positivo.
Per impostazione predefinita, il tentativo di creare un'istanza di un processo timer all'interno del contesto della raccolta siti fallirà. Il tentativo di eseguire l'operazione in un blocco privilegiato con privilegi elevati (tramite SPSecurity.RunWithElevatedPrivileges) porterà solo al contesto dell'account del pool di applicazioni dell'applicazione Web utilizzato al posto del contesto utente corrente; questo succede solo se l'account del pool di applicazioni ha i diritti per scrivere nel database di configurazione della farm. In questo caso, è in genere perché (a) l'account del servizio della farm viene utilizzato in ruoli in cui non deve essere inserito (per eseguire app Web di contenuto, ad esempio) o (b) sono state concesse autorizzazioni aggiuntive al pool di applicazioni account. Entrambi i casi rappresentano una deviazione da un modello operativo di best practice.
Le istanze di processo del timer vengono in genere create in Tempo di attivazione delle funzioni in Funzioni disponibili al livello Farm o WebApplication. Perché? Poiché tali funzioni vengono normalmente attivate dagli amministratori dalla riga di comando (presupponendo che l'amministratore disponga anche dei diritti nel database di configurazione della farm) o dall'interno di Amministrazione centrale (in cui l'attivazione avviene tramite l'account del servizio farm, è garantito il diritto al database di configurazione). Quando la funzione è attivata e viene chiamato il metodo FeatureActivated di SPFeatureReceiver, è sicuro (dal punto di vista della sicurezza) impostare il lavoro del timer.
Risolvere correttamente il tuo problema specifico comporterà un po 'di problemi. Invece di provare a istanziare il lavoro del timer all'interno della raccolta siti su richiesta, ti consigliamo di impostare l'equivalente di un lavoro timer "sweep" nel momento in cui la tua funzione è attivata. Certo, questo richiede più pianificazione e impegno rispetto a quello che stai cercando di fare, ma il tuo attuale percorso funzionerà solo se la sicurezza è in qualche modo regolata - e questo non è raccomandato.
Quando stavo assemblando la mia funzionalità BLOB cache farm flush (http://blobcachefarmflush.codeplex.com), dovevo fare la stessa cosa da sola.È possibile visualizzare le specifiche di come ho lavorato durante la creazione del lavoro timer nella classe FeatureReceiver (BlobCacheFarmFlushSweepJobFeatureReceiver). Il resto del codice e la documentazione associata possono anche aiutare con alcune delle altre sfide che emergono.
Sentiti libero di usare ciò che trovi in qualsiasi modo; ecco perché è lì!
Spero che questo aiuti. Se ci sono domande di follow-up, sparare e risponderò nel modo migliore possibile :-)
fonte
2009-06-24 13:53:20
Hey Sean Grazie per la tua risposta ..... L'ho trovato molto utile. Richiederò sicuramente delle domande se avrò .... Grazie ancora – Anoop
Come configurare ed eseguire questo lavoro, quindi? – Evgeny
Sono amministratore sul mio pc. – Evgeny