zoukankan      html  css  js  c++  java
  • 学习:关于代码调用SSP获取UserProfile出错的解决方案(转)

     

     

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

     

    代码如下:

    SPSite site = new SPSite("http://ssjin073:9031");       

     //获取上下文环境

     ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);

    //this.Context.Items["Microsoft.Office.ServerContext"] = context;

    UserProfileManager _profileManager;       

    _profileManager = new UserProfileManager(context) ;

    UserProfile u = _profileManager.GetUserProfile("saictest""zjy");

    Response.Write(u.PersonalUrl);

     

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

     

    Error

    值不能为空。

    参数名: serverContext

    说明: 执行当前Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.ArgumentNullException: 值不能为空。

    参数名: serverContext

    源错误:

    46:   UserProfile u = _profileManager.GetUserProfile("saictest""zjy");

    47:

    48:        Response.Write(u.PersonalUrl);

     

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

     

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

     SPSite site = new SPSite("http://ssjin073:9031");       

            //获取上下文环境

            ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);

            //此处将ServerContext放入上下文

     this.Context.Items["Microsoft.Office.ServerContext"] = context;

            UserProfileManager _profileManager;       

           _profileManager = new UserProfileManager(context) ;

      

           UserProfile u = _profileManager.GetUserProfile("saictest""zjy");

           Response.Write(u.PersonalUrl);

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

     

    注意:

    1)站点应用程序池的帐号必须有足够的权限,或者直接采用MOSS站点的应用程序池.

    2)站点的web.config下需要添加如下配置:

    <identity impersonate="true" />

     

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

     

    protected void Page_Load(object sender, EventArgs e)  

        {

            SPSecurity.RunWithElevatedPrivileges(delegate()

            {

                UpdateItem();

            }

            );          

        }

        void UpdateItem()

        {

            SPSite site = new SPSite("http://ssjin073:9032");

           

            SPWeb web = site.RootWeb;

             

            //强制设置上下文对象

            HttpContext.Current.Items["HttpHandlerSPWeb"] = web;

            web.AllowUnsafeUpdates = true;

            SPList list = web.Lists["MainList"];

            SPListItem item = list.Items[0];

            item["Title"] = DateTime.Now.ToString();

            item.Update();

            web.Dispose();

            site.Dispose();

    }

     

    文章来源:http://www.cnblogs.com/jianyi0115/archive/2008/04/11/1148827.html

  • 相关阅读:
    webstrom 内存溢出,软件崩溃卡死解决的方法
    JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
    JAVA 基础 /第七课: 面向对象 / JAVA类的属性,类变量与实例变量
    JAVA 基础 /第六课: 面向对象 / JAVA中的类和对象
    JAVA 基础 /第五课:ECLIPSE常见的使用技巧以及部分快捷键
    JAVA 基础 / 第四课:在ECLIPSE中运行第一个 JAVA 程序以及找不到类的问题
    JAVA 基础 /第三课:下载 ECLIPSE并使用ECIPSE创建第一个 JAVA PROJECT
    JAVA 基础 / 第二课:用命令行中编写第一个 JAVA 程序
    JAVA 基础 / 第一课:手把手教你做JDK环境变量配置
    Java swing中的keyListener使用事例
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1551627.html
Copyright © 2011-2022 走看看