From:http://www.cnblogs.com/BruceLee521/

开始以为要构建

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

GenericPrincipal genericPrincipal =new GenericPrincipal(genericIdentity, roles);

然后把HttpContext.Current.User 置成上面构造的。但发现在打开个人站点时出错。

然后修改个人站点C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\SPSPERS\default.aspx

加入

username:<%=HttpContext.Current.User.Identity.Name%>:
authen:<%=HttpContext.Current.User.Identity.AuthenticationType%>
authe:<%=HttpContext.Current.User.GetType().ToString()%>
identity:<%=HttpContext.Current.User.Identity.GetType().ToString()%>

运行发现页面输出

helloWORLD:sunsheng: authen:Forms authe:System.Web.Security.RolePrincipal identity:System.Web.Security.FormsIdentity

才知道构造用户错误,应该构造

System.Web.Security.RolePrincipal
System.Web.Security.FormsIdentity

于是写了类

public class MOSSFBAImpersonate
    {

//code sample by Ric
        //================
        //  MOSSFBAImpersonate mossFBAImpersonate = new MOSSFBAImpersonate(ConfigurationManager.AppSettings.Get("RoleProviderName"));
        // FBAIP.Impersonate([roleProvidernameFromWebconfig],[impersonatingUserName]);
        //  //to do you work here....
        //  FBAIP.Revoke();
        //================

#region public functions

public MOSSFBAImpersonate(string roleProviderName)
        {
            m_rolePrincipal = (IPrincipal)HttpContext.Current.User;
            m_roleProvider = roleProviderName;
            if (null == m_roleProvider)
                throw (new Exception("MOSSFBAImpersonate::roleProviderName is null!"));
        }
        public void Impersonate(string userName)
        {
            HttpContext.Current.User = this.CreateHttpUser(m_roleProvider, userName);
        }
        public void Revoke()
        {
            if (null != m_rolePrincipal)
                HttpContext.Current.User = (IPrincipal)m_rolePrincipal;
        }
        #endregion
        #region private region
        private object m_rolePrincipal = null;
        private string m_roleProvider = null;

private RolePrincipal CreateHttpUser(string roleProviderName, string userName)
        {
            GenericIdentity genericIdentity = new GenericIdentity(userName, "Forms");
            return new RolePrincipal(roleProviderName, genericIdentity);
        }
        #endregion
    }

来进行模拟用户

得到个人站点的代码可以如下:

public SPWeb GetPersonalWeb(string strAccount, string strPersonalSiteHost)
        {
            SPWeb myWeb = null;
            SPSite spPersonalSite = null;
            MOSSFBAImpersonate mossFBAImpersonate = new MOSSFBAImpersonate(ConfigurationManager.AppSettings.Get("RoleProviderName"));
            try
            {
                mossFBAImpersonate.Impersonate(strAccount);
                spPersonalSite = new SPSite(strPersonalSiteHost);
                myWeb = spPersonalSite.RootWeb;
                mossFBAImpersonate.Revoke();
            }
            catch (System.Threading.ThreadAbortException thex)
            {
                throw thex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
               //myWeb.Dispose(); //which will be disposed by outside caller.
                spPersonalSite.Dispose();
            }
            return myWeb;
        }

转载于:https://www.cnblogs.com/Jeffer/archive/2009/11/26/1611632.html

解决模拟MOSS用户调用WebService打开个人站点进行操作相关推荐

  1. PHP调用Webservice实例

    NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService.它是一个开源软件,是完全采用PHP语言编写 的.通过HTTP收发SOAP消息的一系列PHP类,由NuSph ...

  2. 调用webservice接口,报错:(十六进制值0x01)是无效的字符。

    文章目录 #事故现场 #分析 #解决方法 #事故现场 调用webservice接口,报错:(十六进制值0x01)是无效的字符. 如图: 意思是webservice返回的信息中包含无效的字符,无法解析成 ...

  3. (转)解决“Internet Explorer 无法打开 Internet站点已终止操作”问题

    在IE下,当页面还没有加载完全时,如果正在执行的JS代码中含有使用了document.createElement的话,很容易引起页面加载失败.导致提示"internet explore 无法 ...

  4. internet explorer 无法打开 Internet站点 已中止操作

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript使IE的经典异常 代码 http://www.yi521.com 2008-4-15 18:29:29 不 ...

  5. EJBCA 6 通过调用WebService接口增加用户并获取证书

    2019独角兽企业重金招聘Python工程师标准>>> 今天终于搞定通过调用WebService 接口的方式在EJBCA 中增加用户. 本项目完整代码请参见http://git.os ...

  6. ajax处理返回的xml数据,使用AJAX调用WebService返回xml不返回json原因以及解决办法...

    初次尝试用AJAX调用webservice,结果无论怎么设置webservice返回的都是xml对象,一般的jquery处理json是更方便的. webservice理论上将下面这段代码按照说明取消注 ...

  7. 解决 java.io.FileNotFoundException:请求的操作无法在使用用户映射区域打开的文件上执行。

    最近写Web项目时遇到了一个问题,对服务器上某个文件进行了读写操作后.再次执行该操作时,struts2报错,引发异常:C:\Program Files\Apache Software Foundati ...

  8. android模拟器webservice,已解决:android 模拟器调用本地的webservice 引用不到

    背景,需要自己用 java 写一个 webservice, 然后写一个 android的客户端去调用它. 我这里折腾了2天,最后终于调成功了.以图为证. 要点: 1,  MyEclipse开发webs ...

  9. WebService大讲堂之Axis2(8):异步调用WebService

     在前面几篇文章中都是使用同步方式来调用WebService.也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止.使用同步方法来调用WebService ...

最新文章

  1. 网络抖动多少ms算正常_男性身高175,体重多少算正常?对照公式算一下,你达标了吗?...
  2. codevs1032
  3. 2020年百度人工智能创意组技术报告评阅
  4. IDA Pro ARM指令集和Thumb指令集的切换
  5. 爬虫笔记:Urllib库详解
  6. ThinkPad紧凑型蓝牙键盘(0B47189)鼠标滚轮用法,F1到F12功能键的功能切换以及其他技巧
  7. Python中Function(函数)和methon(方法)
  8. cocos2d-x游戏实例(7)-A星算法(3)
  9. 我为什么放弃饿了么产品总监不干,却从事自由职业?
  10. 字节跳动第三轮技术面,Java篇
  11. JSPatch库, 一个Apple官方支持的实现在线更新iOS应用的库
  12. 生成Ipa安装包的plist文件后生成下载链接
  13. JAVA获取word书签内容_Java 操作Word书签(一):添加、删除、读取书签
  14. 【数学建模】数据包络分析法
  15. matlab求两向量夹角_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...
  16. [前端]-- jquery学习1
  17. 关闭Window 10 Ctrl+Shift+B(表情包)快捷键冲突
  18. EasyRecovery免费电脑硬盘数据恢复软件使用教程
  19. 欢迎进入“健康之家”:Delos推出全球首个住宅健康技术平台
  20. 架构师的职责是什么?

热门文章

  1. 使用ajax获取用户所在地的天气
  2. python之工作举例:通过复制NC文件来造数据
  3. C++构造函数/析构函数 设置成private的原因
  4. NoSQL数据库:数据的一致性
  5. 虚拟化运行[OpenStack] VMWare产品介绍
  6. android4.0.3 修改启动动画和开机声音
  7. Oracle常用的几个父栓
  8. 使用Server 2008新GPO做驱动器映射
  9. Provisioning Services 7.8 入门系列教程之十一 通过版本控制自动更新虚拟磁盘
  10. 程序图片运行效果存在偏差问题