Получить имя связанного поставщика общих служб? - PullRequest
2 голосов
/ 12 сентября 2008

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

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

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

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

1 Ответ

1 голос
/ 15 сентября 2008

К сожалению, я не знаю, как это можно сделать. Соответствующий класс - 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-запроса к базе данных конфигурации, что не рекомендуется.

...