Domanda

Ho un sito di radice con siti a diversi livelli (la profondità è sconosciuta).Come posso trovare tutti gli oggetti SPWeb Iteraing fino al livello più profondo.

Il seguente codice mi dà il risultato desiderato

SPWebApplication mySPWebApp = SPWebApplication.Lookup(new Uri("http://test-site"));
{
    foreach (SPSite siteCollection in mySPWebApp.Sites)
    {
        foreach (SPWeb oweb in siteCollection.AllWebs)
        {
            //My Code
        }
    }
}
.

È stato utile?

Soluzione

Sì, con SPWeBapplication.sites ottieni tutte le raccolte di siti in un'applicazione Web e con SPSite.allWebs ottieni tutti i siti in una raccolta del sito, indipendentemente dal livello.

.

La migliore pratica è di disporre esplicitamente dei singoli siti Web che vengono recuperati dalla raccolta che viene restituita attraverso la proprietà di AllWebs.

foreach (SPWeb oweb in siteCollection.AllWebs)
{
     try
     {
           //Your code
     }
     finally
     {
          oweb.Dispose();
     }
}
.

Dovresti smaltire anche le raccolte siti.

Altri suggerimenti

Per costruire la risposta di @ Naim, è necessario disporre sia le raccolte del sito che le reti e l'utilizzo di prove / cattura attorno alle istruzioni di smaltimento o utilizzando.

Raccolta del sito Dispose l'esempio

da Best Practices: Utilizzo di Windows SharePoint monousoServizi Oggetti

void SPSiteCollectionForEachNoLeak()
{
    using (SPSite siteCollectionOuter = new SPSite("http://moss"))
    {
        SPWebApplication webApp = siteCollectionOuter.WebApplication;
        SPSiteCollection siteCollections = webApp.Sites;

        foreach (SPSite siteCollectionInner in siteCollections)
        {
            try
            {
                // ...
            }
            finally
            {
                if(siteCollectionInner != null)
                    siteCollectionInner.Dispose();
            }
        }
    } // SPSite object siteCollectionOuter.Dispose() automatically called.
}
.

Smaltire il Web Esempio

da Best Practices: Utilizzo di Windows SharePoint monousoServizi Oggetti

void SPWebCollectionAddNoLeak(string strWebUrl)
{
    using (SPSite siteCollection = new SPSite("http://moss"))
    {
        using (SPWeb outerWeb = siteCollection.OpenWeb())
        {
            SPWebCollection webCollection = siteCollection.AllWebs; // No AllWebs leak just getting reference.
            using (SPWeb innerWeb = webCollection.Add(strWebUrl))
            {
                //...
            }
        } // SPWeb object outerWeb.Dispose() automatically called.
    }  // SPSite object siteCollection.Dispose() automatically called. 
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top