Attualmente sto lavorando su un TimerJob che gestisce alcune raccolte siti. Quando il lavoro viene eseguito, esamina un elenco per recuperare l'URL di una raccolta siti, quindi chiama SPSite.Exists()
per verificare se il sito esiste ancora o meno.SPSite.Exists() restituisce true anche se la raccolta siti non esiste
Per provare TimerJob, eliminare una raccolta siti ma ho lasciato la voce corrispondente nell'elenco. Quindi avvio TimerJob e passo il suo codice in modalità di debug. Quando si giunge al punto di verificare se il sito esiste, SPSite.Exists()
restituisce true.
Quando si esegue il TimerJob una seconda volta per la stessa raccolta siti, il metodo restituisce false come dovrebbe.
Così ora mi chiedo perché SPSite.Exists()
restituisce il risultato falso quando eseguo il lavoro per la prima volta. Potrebbe essere causato dal caching?
Quando eseguo lo stesso codice all'esterno di TimerJob, SPSite.Exists()
restituisce sempre il risultato corretto.
UPDATE
così ho fatto un po 'di debug e sembra che questo problema è in realtà causato da un qualche meccanismo di caching in quanto non si verifica quando il servizio Timer di Windows SharePoint Services è stato riavviato dopo la la raccolta del sito di test è stata cancellata e prima dell'avvio di TimerJob.
Al momento non riesco a immaginare un'altra soluzione se non tentare di accedere al sito eliminato e rilevare l'eccezione che verrà generata per determinare se il sito esiste realmente.
UPDATE 2
Dopo qualche test ho capito che il problema non si verifica per la prima chiamata di SPSite.Exists() (nel TimerJob) dopo Timer Service viene riavviato. La seconda chiamata (per una diversa raccolta siti) porta ancora al problema noto.
UPDATE 3
Al momento sto utilizzando un brutto hack per risolvere il mio problema. Quando SPSite.Exists() restituisce true anche se in realtà non esiste, creo un oggetto SPSite e provo a provocare un oggetto FileNotFoundException chiamando la sua proprietà Usage. Quando sorgono le eccezioni, so che il sito non esiste. Stranamente dopo che l'eccezione è stata lanciata, SPSite.Exists() restituisce il risultato corretto (false).
Altri suggerimenti là fuori?
Bye, Flo
Rispetto alla mia soluzione (Update 3) la soluzione evita di rilevare un'eccezione. Mi piace questo. Quindi questo sarebbe un miglioramento del mio codice. – Flo