检索关联的共享服务提供商的名称?

时间:2020-03-05 18:52:10  来源:igfitidea点击:

我们如何以编程方式检索与特定Sharepoint Web应用程序关联的共享服务提供商的名称?

我有一个自定义解决方案,需要:

  • 枚举部署到的所有Web应用程序
  • 找出每个Web应用程序都与之关联的共享服务提供程序
  • 访问安装在SSP上的业务数据目录以检索一些数据
  • 枚举那些Web应用程序中的所有网站集
  • 根据数据在网站集中执行各种任务

我知道了要点1、3、4和5,但是2有点麻烦。我想避免在任何地方对SSP名称进行硬编码,并且不需要服务器场管理员手动编辑配置文件。我需要的所有信息都在Sharepoint配置数据库中,我只需要知道如何通过对象模型进行访问即可。

解决方案

回答

不幸的是,据我所知,没有支持的方法可以做到。相关类是Microsoft.Office.Server.Administration命名空间中Microsoft.Office.Server DLL中的SharedResourceProvider。它被标记为内部,因此预反射:

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查询。