SharePoint中每一类Service都有一个唯一的Guid进行相应的标识,并且其下的Application会继承这个Guid,名曰:ApplicationClassId。因此,可以根据ApplicationClassId去确认Application属于哪一类Service。例如User Profile Service下所有的Application的ApplicationClassId都为:e12223eb-f793-4e73-9f5b-3bfcc06ed092。
其他的ApplicationClassId也可以用编程的方式获得:
//遍历所有的service foreach (SPService service in SPFarm.Local.Services) { //遍历该service下所有的application foreach (SPServiceApplication app in service.Applications) { //app.ApplicationClassId } }
因此可以用去比较此Application的ApplicationClassId,以确定此Application是否属于User Profile Service。
不过还有另外一种方式:先确定Service的类别,然后直接遍历该Service下所有的Application
具体步骤:在确保开启User Profile Service的情况下,可以通过SPFarm.Local.Services获取所有的Service,然后对所有的Service进行遍历,当获取到User Profile Service时,可以对该Service下的所有Application进行遍历。
请看如下代码:
public DictionaryGetUserProfile() { Dictionary userProfileApps = new Dictionary (); try { //遍历所有的service foreach (SPService service in SPFarm.Local.Services) { if (service.TypeName.Equals("User Profile Service", StringComparison.OrdinalIgnoreCase)) { //遍历该service下所有的application foreach (SPServiceApplication app in service.Applications) { //当前farm下面可用的UserProfile Service Application userProfileApps.Add(app.DisplayName, app.ID); } } } } catch (Exception ex) { Logger.Error("Error occurred while get user profile, error message: {0}", ex.ToString()); } return userProfileApps; }
当然想要遍历其他Service,只需要在代码中修改service 的 TypeName。
为了获取 SharePoint 2010 中所有service TypeName的信息,可以进行如下三步走:
- 用farm administrator登录到SharePoint 2010的server中
- 打开 SharePoint 2010 Management Shell
- 输入此命令行: Get-SPServiceInstance
这个命令行将会显示所有service instance的 status 和 id :
定位好了User Profile Service Application后,便可以获取此Application下的所有User Profile信息,完成所谓的User Profile的增删改查操作。