Я знаю, что этот вопрос действительно старый, но, поскольку он по-прежнему является одним из первых / единственных результатов, я решил поделиться найденным решением, которое использует поиск SharePoint для решения этой проблемы. Мало того, что это действительно быстро, вы можете настроить запрос по своему вкусу или даже создать собственную область поиска, чтобы ограничить результаты.
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);
...
}
Запрос выше также может быть передан на /vti_bin/search.asmx
, но это немного сложнее. Более подробную информацию можно найти здесь: http://msdn.microsoft.com/en-us/library/ee872313.aspx