Je sais que cette question est vraiment ancienne, mais comme c'est toujours l'un des premiers/seuls résultats, j'ai pensé que je partagerais la solution que j'ai trouvée qui utilise la recherche SharePoint pour résoudre le problème. Non seulement c'est vraiment rapide, vous pouvez modifier la requête à votre goût ou même créer une portée de recherche personnalisée pour limiter les résultats.
string queryText = "SELECT url, title " +
"FROM Scope() " +
"WHERE \"Scope\" = 'All Sites' " +
"AND (ContentClass = 'STS_Site' OR ContentClass = 'STS_Web')";
SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
FullTextSqlQuery searchQuery = new FullTextSqlQuery(proxy);
searchQuery.ResultsProvider = SearchProvider.Default;
searchQuery.ResultTypes = ResultType.RelevantResults;
searchQuery.EnableStemming = false;
searchQuery.TrimDuplicates = true;
searchQuery.QueryText = queryText;
searchQuery.RowLimit = 1000;
ResultTableCollection results = searchQuery.Execute();
ResultTable result = results[ResultType.RelevantResults];
while (result.Read())
{
string url = result.GetString(0);
string title = result.GetString(1);
...
}
La requête ci-dessus peut également être transmis à /vti_bin/search.asmx
, mais qui est un peu plus compliqué. Plus d'informations peuvent être trouvées ici: http://msdn.microsoft.com/en-us/library/ee872313.aspx