2008-09-12 2 views
2

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

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

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

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

ответ

2

К сожалению, нет поддерживаемого способа. Я знаю, что это можно сделать. Соответствующий класс - SharedResourceProvider в пространстве имен Microsoft.Office.Server.Administration, в Microsoft.Office.Server DLL. Оно характеризуется внутренней так предварительно отражения:

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