2011-12-22 77 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