Получение имени связанного поставщика общих услуг?

Как программным способом получить имя поставщика общих служб, связанного с конкретным веб-приложением Sharepoint?

У меня есть индивидуальное решение, которое должно:

  1. Перечислить все веб-приложения, в которых он развернут.
  2. Выясните поставщика общих служб, с которым связано каждое из веб-приложений.
  3. Доступ к каталогу бизнес-данных, установленному на SSP, для получения некоторых данных.
  4. Перечислить все семейства сайтов в этих веб-приложениях.
  5. Выполнять различные задачи внутри семейств сайтов в соответствии с данными

Я разобрался с пунктами 1, 3, 4 и 5, но второй - это несколько хлопотно. Я хочу избежать жесткого кодирования имени SSP и не требовать, чтобы администратор фермы вручную редактировал файл конфигурации. Вся необходимая мне информация находится в базе данных конфигурации Sharepoint, мне просто нужно знать, как получить к ней доступ через объектную модель.


person Hirvox    schedule 12.09.2008    source источник


Ответы (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-запроса к базе данных конфигурации, что не рекомендуется.

person Alex Angas    schedule 15.09.2008