none
求助 MSCRM 4.0,IFD验证下,自定义aspx页面,如何获取当前的用户ID ? RRS feed

  • 问题

  • 大家好  MSCRM 4.0,IFD验证下,自定义aspx页面,获取不到当前的用户ID,出现报错信息:请求因 HTTP 状态 401 失败: Unauthorized。

    麻烦大家帮我看看,谢谢。

    主要代码如下:

    #region MyRegion
    /// <summary>
    /// 创建CrmService
    /// </summary>
    /// <returns></returns>
    protected CrmService createCrmService()
    {
    try
    {
    CrmService crmService = new CrmService();//实例化CrmService
    return crmService;//返回
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
    #endregion

    #region 初始化WebService
    public void InitializeCrmService()
    {
    try
    {
    using (new CrmImpersonator())
    {
    CrmService crm = createCrmService();
    CrmAuthenticationToken token = new CrmAuthenticationToken();//实例化CrmAuthenticationToken
    token.AuthenticationType = 0;//改成2也不行
    token.OrganizationName = CRMOrganizationName;//获取组织
    crm.Url = string.Format("http://{0}:{1}/MSCRMServices/2007/CrmService.asmx", CRMServerHost, CRMServerPort);
    crm.Credentials = System.Net.CredentialCache.DefaultCredentials;
    crm.CrmAuthenticationTokenValue = token;
    }
    }
    catch (Exception ex)
    {
    throw new Exception(ex.Message);
    }
    }
    #endregion

    #region 获取当前登录用户的信息
    /// <summary>
    /// 获取当前登录用户的信息
    /// </summary>
    /// <returns></returns>
    public Guid GetSystemUser1()
    {
    try
    {
    using (new CrmImpersonator())
    {
    CrmService crm = createCrmService();//Create the Service
    WhoAmIRequest request = new WhoAmIRequest();
    WhoAmIResponse response = (WhoAmIResponse)crm.Execute(request);
    return response.UserId;//返回用户ID
    }
    }
    catch (Exception ex)
    {
    WriteLog("ex:"+ex.Message); //这里会输出错误信息:请求因 HTTP 状态 401 失败: Unauthorized。
    throw ex;
    }
    }
    #endregion

    我想在aspx页面,Page_Load 里面调用GetSystemUser1() 方法,获取到当前的用户ID。






    • 已编辑 Tan Hua 2012年11月27日 9:08
    2012年11月27日 6:33

全部回复

  • 问题已经解决,谢谢大家。

    解决方案:只要在获取当前登录用户的信息的方法 加上前面InitializeCrmService的代码 就可以了。代码如下:
            #region
            /// <summary>
            /// 获取当前登录用户的信息
            /// </summary>
            /// <returns></returns>
            public Guid GetSystemUser1()
            {
                try
                {
                   using (new CrmImpersonator())//必须加上
                   {
                        CrmService crm = createCrmService();
                        CrmAuthenticationToken token = new CrmAuthenticationToken();
                        token.AuthenticationType = 0;//不能改
                        token.OrganizationName = CRMOrganizationName;
                        crm.CrmAuthenticationTokenValue = token;
                        crm.Url = string.Format("http://{0}:{1}/MSCRMServices/2007/CrmService.asmx", CRMServerHost, CRMServerPort);
                        crm.Credentials = System.Net.CredentialCache.DefaultCredentials;
                        WhoAmIRequest request = new WhoAmIRequest();
                        WhoAmIResponse response = (WhoAmIResponse)crm.Execute(request);
                        return response.UserId;        
                   }
                }
                catch (Exception ex)
                {
                    WriteLog("ex:"+ex.Message);
                    throw ex;
                }
            }
           #endregion

    这个问题,太粗心了,其实没有解决, 因为获取到当前的用户ID 和JS传过来的当前用户ID(是正确的)不一样。只是获取到了用户ID,页面没有报错而已。
      我把两个获取的ID,在数据库中查询了下,发现:
         IFD 下面获取的当前用户ID 对应的的LastName 是 :SYSTEM
              JS传过来的当前用户ID所对应的LastName 是:      CRM
    麻烦大家再帮我看看。谢谢。
    • 已标记为答案 Tan Hua 2012年11月28日 2:19
    • 取消答案标记 Tan Hua 2012年11月28日 4:54
    • 已编辑 Tan Hua 2012年11月28日 4:55
    2012年11月27日 13:31
  • 这个问题,太粗心了,其实没有解决, 因为获取到当前的用户ID 和JS传过来的当前用户ID(是正确的)不一样。只是获取到了用户ID,页面没有报错而已。
      我把两个获取的ID,在数据库中查询了下,发现:
         IFD 下面获取的当前用户ID 对应的的LastName 是 :SYSTEM
              JS传过来的当前用户ID所对应的LastName 是:      CRM
             麻烦大家帮我看看。谢谢。

    • 已编辑 Tan Hua 2012年11月28日 10:21
    2012年11月28日 4:55
  • 发现在CRM 4.0 IFD 下 添加不了 CrmDiscoveryService的web引用,这是为什么?
    2012年12月6日 9:40
  • 去你的服务器,在C:\inetpub\adfs\ls下,修改成你自己定义的页面
    2012年12月8日 12:16
  • 首先非常感谢你,但是C:\inetpub\adfs\ls下,修改成你自己定义的页面。这里怎么修改,可以截图过来看看吗?谢谢
    2012年12月17日 9:24
  • 配置CRM 2011 IFD 药用到adfs, CRM 4.0 也要用到adfs 吗?
    2012年12月21日 9:11