转(http://www.cnblogs.com/jianyi0115/archive/2008/04/11/1148827.html)

用代码调用MOSS的SSP获取UserProfile时,代码只能运行于MOSS站点下,或者是WinForm中,否则,会出错,这个问题如何解决呢?

代码如下:

关于代码调用SSP获取UserProfile出错的解决方案(转)SPSite site = new SPSite("http://ssjin073:9031");        
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)        
//获取上下文环境
关于代码调用SSP获取UserProfile出错的解决方案(转)
        ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)       
//this.Context.Items["Microsoft.Office.ServerContext"] =  context;
关于代码调用SSP获取UserProfile出错的解决方案(转)
       
关于代码调用SSP获取UserProfile出错的解决方案(转)        Response.Write(context.Status);
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)        UserProfileManager _profileManager;        
关于代码调用SSP获取UserProfile出错的解决方案(转)       _profileManager 
= new UserProfileManager(context) ;
关于代码调用SSP获取UserProfile出错的解决方案(转)   
关于代码调用SSP获取UserProfile出错的解决方案(转)       UserProfile u 
= _profileManager.GetUserProfile("saictest\\zjy");
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)       Response.Write(u.PersonalUrl);


这段代码只能在MOSS站点的页面上运行,如果在普通的站点或者直接在VS的小IIS中运行,会报如下错误:


这个错误是MOSS的一个bug引起的,SiteContext的内部代码会调用当前上下文中的ServerContext,调用不到,就抱错了。

我们可以通过手工添加上下文对象解决这个问题 :

关于代码调用SSP获取UserProfile出错的解决方案(转) SPSite site = new SPSite("http://ssjin073:9031");        
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)        //获取上下文环境
关于代码调用SSP获取UserProfile出错的解决方案(转)        ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)        //此处将ServerContext放入上下文
关于代码调用SSP获取UserProfile出错的解决方案(转)       this.Context.Items["Microsoft.Office.ServerContext"] =  context;
关于代码调用SSP获取UserProfile出错的解决方案(转)       
关于代码调用SSP获取UserProfile出错的解决方案(转)        Response.Write(context.Status);
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)        UserProfileManager _profileManager;        
关于代码调用SSP获取UserProfile出错的解决方案(转)       _profileManager = new UserProfileManager(context) ;
关于代码调用SSP获取UserProfile出错的解决方案(转)   
关于代码调用SSP获取UserProfile出错的解决方案(转)       UserProfile u = _profileManager.GetUserProfile("saictest\\zjy");
关于代码调用SSP获取UserProfile出错的解决方案(转)
关于代码调用SSP获取UserProfile出错的解决方案(转)       Response.Write(u.PersonalUrl);


以上代码在任何站点下都可以运行了!

注意:
1)站点应用程序池的帐号必须有足够的权限,或者直接采用MOSS站点的应用程序池.
2)站点的web.config下需要添加如下配置:

关于代码调用SSP获取UserProfile出错的解决方案(转)<identity impersonate="true" />


----------
另:提升权限后,操作ListItem也会出现类似的错误,可以用同样的方法解决:

关于代码调用SSP获取UserProfile出错的解决方案(转)protected void Page_Load(object sender, EventArgs e)   
    }

相关文章:

  • 2022-12-23
  • 2021-11-27
  • 2021-12-29
  • 2021-12-11
  • 2022-01-18
  • 2021-04-21
  • 2021-08-14
  • 2021-05-06
猜你喜欢
  • 2021-08-22
  • 2021-05-31
  • 2021-08-19
  • 2021-09-08
  • 2022-12-23
  • 2021-05-22
相关资源
相似解决方案