正在检索关联的共享服务提供商的名称?
-
09-06-2019 - |
题
如何以编程方式检索与特定 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 查询,但不推荐这样做。
不隶属于 StackOverflow