关于代码调用SSP获取UserProfile出错的解决方案
代码如下:
//获取上下文环境
ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);
//this.Context.Items["Microsoft.Office.ServerContext"] = context;
Response.Write(context.Status);
UserProfileManager _profileManager;
_profileManager = new UserProfileManager(context) ;
UserProfile u = _profileManager.GetUserProfile("saictest\\zjy");
Response.Write(u.PersonalUrl);
这段代码只能在MOSS站点的页面上运行,如果在普通的站点或者直接在VS的小IIS中运行,会报如下错误:
值不能为空。
参数名: serverContext
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentNullException: 值不能为空。
参数名: serverContext
源错误:
行 44:
行 45:
行 46: UserProfile u = _profileManager.GetUserProfile("saictest\\zjy");
行 47:
行 48: Response.Write(u.PersonalUrl);
源文件: e:\DEV\zjy\MCS Enterprise Solution\MCS Enterprise Solution\SharePoint\MCS.SharePoint.Web\Default.aspx.cs 行: 46
堆栈跟踪:
[ArgumentNullException: 值不能为空。
参数名: serverContext]
Microsoft.Office.Server.SiteContext..ctor(ServerContext serverContext) +79
Microsoft.Office.Server.SiteContext.get_Current() +128
Microsoft.Office.Server.UserProfiles.SRPSite.get_SiteContext() +36
Microsoft.Office.Server.UserProfiles.PropertyDataTypeCollection..ctor(SRPSite site) +264
Microsoft.Office.Server.UserProfiles.SRPSite.get_DataTypes() +48
Microsoft.Office.Server.UserProfiles.UserProfileManager.get_PropertyDataTypes() +58
Microsoft.Office.Server.UserProfiles.UserProfile.Load(SqlDataReader myReader, Boolean bFirstRead, Boolean bWssId) +116
Microsoft.Office.Server.UserProfiles.UserProfile.Load(SqlDataReader myReader) +33
Microsoft.Office.Server.UserProfiles.UserProfile.RetrieveUser(String strAcct, Guid gAcct, Byte[] bSid, Nullable`1 recordId, Boolean doNotResolveToMasterAccount) +703
Microsoft.Office.Server.UserProfiles.UserProfile..ctor(UserProfileManager objManager, String strAcct, Boolean doNotResolveToMasterAccount, Boolean forceUserIsSelf) +329
Microsoft.Office.Server.UserProfiles.UserProfile..ctor(UserProfileManager objManager, String strAcct) +37
Microsoft.Office.Server.UserProfiles.UserProfileManager.GetUserProfile(String strAccountName) +129
_Default.Page_Load(Object sender, EventArgs e) in e:\DEV\zjy\MCS Enterprise Solution\MCS Enterprise Solution\SharePoint\MCS.SharePoint.Web\Default.aspx.cs:46
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +45
System.Web.UI.Control.OnLoad(EventArgs e) +80
System.Web.UI.Control.LoadRecursive() +49
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3743
这个错误是MOSS的一个bug引起的,SiteContext的内部代码会调用当前上下文中的ServerContext,调用不到,就抱错了。
我们可以通过手工添加上下文对象解决这个问题 :
//获取上下文环境
ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);
//此处将ServerContext放入上下文
this.Context.Items["Microsoft.Office.ServerContext"] = context;
Response.Write(context.Status);
UserProfileManager _profileManager;
_profileManager = new UserProfileManager(context) ;
UserProfile u = _profileManager.GetUserProfile("saictest\\zjy");
Response.Write(u.PersonalUrl);
以上代码在任何站点下都可以运行了!
注意:
1)站点应用程序池的帐号必须有足够的权限,或者直接采用MOSS站点的应用程序池.
2)站点的web.config下需要添加如下配置:
----------
另:提升权限后,操作ListItem也会出现类似的错误,可以用同样的方法解决:
{
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();
}
关于代码调用SSP获取UserProfile出错的解决方案相关推荐
- 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
文章目录 一.进程注入原理 二.远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一.进程注入原理 调试进程 At ...
- php执行跟踪_PHP使用debug_backtrace方法跟踪调试代码调用详解
本文实例讲述了PHP使用debug_backtrace方法跟踪调试代码调用.分享给大家供大家参考,具体如下: 在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到 ...
- 为所有服务器端代码调用ConfigureAwait的最佳实践
本文翻译自:Best practice to call ConfigureAwait for all server-side code When you have server-side code ( ...
- python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法
接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )
文章目录 一. ActivityThread 中的 installProvider 方法 ( 创建 ContentProvider 内容提供者 ) 二. installProvider 方法的第三分支 ...
- 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application )
文章目录 一. ContentProvider 创建过程分析 二. ActivityThread 中的 H 处理 BIND_APPLICATION 消息 三. ActivityThread 中的 ha ...
- php 利用debug_backtrace方法跟踪代码调用
在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改.如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调 ...
- java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...
1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...
- java获取本机ip地址_代码片段:获取系统所有IP
问题 在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等.如下图所示: 每一张网卡由不同的类型,也可以分别被用户启用或禁用. 对于单独一张给定的网卡,其IP地址可以是D ...
最新文章
- 初步了解Windows Safer API
- linux kernel浮点处理
- bert模型中的[CLS]、[UNK]、[SEP]
- Web Service 简单实例(java 版本) ,IDE自动生成客户端代码方法
- 大数据思维是企业互联网化的思维内核
- 网络编程中的常见陷阱之 0x十六进制数(C++字面值常量)
- loading窗口动画 web_在页面未加载完之前显示loading动画
- 在Linux下写一个简单的驱动程序
- 10g的客户端从9i的服务器中导出数据时遇到上面的问题
- 玩转接口测试,那些必备的技能
- vs2012中对于entity framework的使用
- Django日志模块logging的配置详解
- Linux下mail服务配置(RHEL5)
- AC010笔记之三:总结
- 天涯明月刀罗技鼠标自由弹奏脚本
- 图像检索:基于内容的图像检索技术
- java netbeans_Java初学者学习Netbeans介绍
- Java-汉字字符串转拼音,包括首字母和全拼
- 如何设置默认浏览器?快速学会,简单易懂
- HBase数据库使用TTL清理过期数据
热门文章
- 共享端口445能改吗_模玩控:高达模型改圣斗士星矢五小强,大家能认出它们都是机体吗?...
- 8个JavaScript题目
- linux3.8内核下载,linux 3.8内核usbmouse代码注释
- Oracle数据库基本操作
- 用Eclipse制作博客
- Docker 快速安装 Mysql
- linux下无线网卡安装debian,Debian/Linux下无线网卡驱动的安装,网卡型号是「BCM43228」...
- 绿米开关如何重置_开个灯还带音效?跟我学简单改装智能开关,保证按上瘾!...
- jfinal-layui中如果sql是多表时条件查询写法
- layui引入jQuery