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

问题
-
大家好 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
全部回复
-
问题已经解决,谢谢大家。
解决方案:只要在获取当前登录用户的信息的方法 加上前面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 是 :SYSTEMJS传过来的当前用户ID所对应的LastName 是: CRM麻烦大家再帮我看看。谢谢。