【发布时间】:2015-03-04 06:43:13
【问题描述】:
我们的 Web 应用程序通过 Microsoft.Xrm.Sdk OriganizationServiceProxy 调用 CRM 时出现身份验证失败的问题。该问题似乎是特定于环境的,即调用在我们的 DEV Web 服务器上工作,但当应用程序升级到我们的系统测试环境时失败。失败的代码如下:
using (var serviceProxy = this.serviceFactory.Impersonate(userProvider.PrincipalUserName).ServiceProxy)
{
var countResult = serviceProxy.RetrieveMultiple(new FetchExpression(query));
int? count = 0;
var entity = countResult.Entities.FirstOrDefault();
if (entity != null)
{
count = (int?)((AliasedValue)entity["activity_count"]).Value;
}
return count.Value;
}
我们的日志中出现的错误是:
System.ServiceModel.Security.SecurityNegotiationException:调用者未经服务验证。 ---> System.ServiceModel.FaultException:由于身份验证失败,无法满足对安全令牌的请求。 在 System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(消息消息,端点地址目标) 在 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(消息incomingMessage,SspiNegotiationTokenProviderState sspiState) --- 内部异常堆栈跟踪结束 ---
我已经仔细检查了 IIS 站点的 apppool 标识和 CRM 设置。这里有什么我们可能遗漏的明显内容吗?
【问题讨论】:
-
通过仔细检查 IIS 和 CRM 设置的 appPool 身份来定义您的意思。
-
检查用于 Web 服务器上的应用程序池身份的服务帐户是否可以与 CRM 服务器通信(服务帐户在 CRM 服务器上具有系统管理员角色)。我们的 Web 应用程序进行了其他基于 CRM LINQ 的调用(使用 ServiceContext),这些调用没有问题。我们遇到的唯一身份验证问题是 Web 应用程序通过 OrganizationServiceProxy 和 RetrieveMultiple 方法查询 CRM 的某些调用。
-
您的系统测试环境是 IFD 吗?
标签: authentication dynamics-crm-2011