Получить имя связанного поставщика общих служб?
Как программно получить имя поставщика общих служб, связанного с конкретным веб-приложением Sharepoint?
У меня есть индивидуальное решение, которое должно:
- Перечислите все развернутые веб-приложения
- Определите поставщика общих служб, с которым связано каждое из веб-приложений
- Доступ к каталогу бизнес-данных, установленному в SSP, для получения некоторых данных
- Перечислять все семейства сайтов в этих веб-приложениях
- Выполнять различные задачи в семействах сайтов в соответствии с данными
Я получил очки 1, 3, 4 и 5, но 2 немного хлопотно. Я хочу избежать жесткого указания имени поставщика общих служб и не требовать, чтобы администратор фермы вручную редактировал файл конфигурации. Вся информация, которая мне нужна, находится в базе данных конфигурации Sharepoint, мне просто нужно знать, как получить к ней доступ через объектную модель.
1 ответ
К сожалению, я не знаю, как это можно сделать. Соответствующим классом является SharedResourceProvider в пространстве имен Microsoft.Office.Server.Administration, в DLL-библиотеке Microsoft.Office.Server. Это помечено как внутреннее предварительное отражение:
SharedResourceProvider sharedResourceProvider = ServerContext.GetContext(SPContext.Current.Site).SharedResourceProvider;
string sspName = sharedResourceProvider.Name;
После отражения:
ServerContext sc = ServerContext.GetContext(SPContext.Current.Site);
PropertyInfo srpProp = sc.GetType().GetProperty(
"SharedResourceProvider", BindingFlags.NonPublic | BindingFlags.Instance);
object srp = srpProp.GetValue(sc, null);
PropertyInfo srpNameProp = srp.GetType().GetProperty(
"Name", BindingFlags.Public | BindingFlags.Instance);
string sspName = (string)srpNameProp.GetValue(srp, null);
Альтернативой может быть написание SQL-запроса к базе данных конфигурации, что не рекомендуется.