2011-12-22 103 views
0

我正在編寫一個事件處理程序,它在ItemAdded上檢查網站是否存在,然後使用給定的URL或使用備用網址創建網站。我已經寫了類似的東西,但我試圖清理我的代碼,存在網站檢查下面的方法。檢查是否存在SharePoint網站

private string CheckSiteExists(SPWeb web, string siteURL, string webURL) 
    { 
     //Counter for our alternate URL 
     int i = 0; 
     //Open original URL 
     SPWeb tempweb = web.Site.OpenWeb(webURL + "/" + siteURL); 
     //Check if site exists 
     if (tempweb.Exists == false) 
     { 
      do 
      { 
       i++; 
       tempweb = web.Site.OpenWeb(webURL + "/" + siteURL + "_" + i); 
      } 
      while (tempweb.Exists == false); 
      //Dispose of our web 
      tempweb.Dispose(); 
     } 
     else 
     { 
      tempweb.Dispose(); 
      //If site does not exist, return original URL 
      return siteURL; 
     } 
     //If site does exist, return original url plus counter 
     return siteURL + "_" + i; 
    } 

我決定測試我有什麼發現,從W3WP 0%的CPU使用率去了50-80%,並在那裏呆了,直到我手動殺了它。我在猜測我的do while語句不是按照我認爲的那樣行事,而只是循環到無限。

回答

1

此代碼似乎發現網頁確實存在匹配的第一個URL,而不是第一個匹配的網頁不存在:

  • 你檢查tempweb.Exists == false而不是== true
  • 你只是處置,並在tempweb.Exists爲真後返回URL。

如果沒有網絡存在,則會陷入很長的循環。

+0

廢話。我盯着這麼久,沒有注意到這一點。謝謝! – Mike 2011-12-22 16:30:14

+0

如果您將它們與true或false進行比較,則說明您沒有正確使用布爾值... – Nacht 2014-04-17 02:14:14