我目前正在開展一些TimerJob,它可以執行一些網站集管理。當作業運行時,它會查看列表以檢索網站集的Url,然後調用SPSite.Exists()
來檢查網站是否仍存在。SPSite.Exists()返回true,儘管網站集不存在
要測試TimerJob,我刪除了一個網站集,但在列表中留下了相應的條目。然後我啓動TimerJob並在調試模式下逐步完成其代碼。當涉及到檢查網站是否存在SPSite.Exists()
返回true的時候。
當我第二次爲同一個網站集運行TimerJob時,SPSite.Exists()
方法會返回false,因爲它應該如此。
所以現在我想知道爲什麼SPSite.Exists()
第一次運行作業時會返回錯誤結果。這可能是由緩存引起的嗎?
當我在TimerJob外運行相同的代碼SPSite.Exists()
每次都返回正確的結果。
UPDATE
所以我做了一些更多的調試,似乎爲這個問題真的是當Windows SharePoint Services定時服務後,已重新啓動不會發生一些緩存機制所致測試站點集合已被刪除,並且在TimerJob啓動之前。
目前我無法想象另一個解決方案,而不是試圖訪問已刪除的網站,並捕捉將拋出的異常,以確定網站是否真的存在。
更新2
一些測試後,我意識到,沒有爲SPSite.Exists的)第一次調用((在TimerJob內)出現的問題重新啓動定時服務之後。第二次調用(針對不同的網站集)仍會導致已知問題。
更新3
目前我使用的是一個醜陋的黑客攻擊,解決我的問題。當SPSite.Exists()返回true時,雖然它實際上不存在,但我創建了一個SPSite對象,並嘗試通過調用其Usage屬性來激發FileNotFoundException。當出現異常時,我知道該網站不存在。奇怪的是,拋出異常後SPSite.Exists()返回正確的結果(false)。
還有其他建議嗎?
再見, 弗洛
與我的解決方案(更新3)相比,您的解決方案可以避免發現異常。我喜歡這個。所以這是對我的代碼的改進。 – Flo 2009-07-26 13:39:42