2009-07-06 55 views
6

我目前正在開展一些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)。

還有其他建議嗎?

再見, 弗洛

回答

4

我也一樣。我在刪除網站集後遇到了類似的問題,我仍然對SPSite.Exists(); 有效。奇怪的是,如果我在瀏覽器中打開已刪除的網站集URL,第一個請求會導致HTTP 400錯誤消息,而第二個請求是預期的HTTP 404。

我的解決方法是爲URL創建一個HTTP GET來創建第一個請求,然後再次檢查網站是否存在。

private void touchWeb(string url, System.Net.ICredentials credentials) 
    { 
     try 
     { 
      Uri uri = new Uri(url); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
      request.Credentials = credentials; 

      request.Method = "GET"; 
      string result = ""; 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        using (StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8)) 
        { 
         result = readStream.ReadToEnd(); 
        } 
       } 
      } 
     } 
     catch (Exception) { } 
    } 
+0

與我的解決方案(更新3)相比,您的解決方案可以避免發現異常。我喜歡這個。所以這是對我的代碼的改進。 – Flo 2009-07-26 13:39:42

5

我有這個相同的問題,並嘗試HTTP請求的方法,但發現它有點慢,一次檢查大量的網站。相反,我結束了使用類似這樣的事情:

public bool SPSiteExists(string url) { 
    SPSite.InvalidateCacheEntry(new Uri(url), Guid.Empty); 
    return SPSite.Exists(uri); 
} 
+0

似乎有人同意我的看法。如果您碰巧在SharePoint Exchange上創建用戶,請隨時發佈此問題。你的發現似乎比我的發現還要早(今天看到你的問題,同時尋找這個問題和逐步刪除工作之間的關係)。鏈接:http://sharepoint.stackexchange.com/questions/57553/spsite-exists-returning-true-for-a-just-deleted-site-collection – SPArchaeologist 2013-01-22 09:46:16

相關問題