我正在通过Microsoft.Xrm.Sdk
+ Microsoft.Pfe.Xrm.Core
NuGet程序包跨Active Directory域连接到Dynamics 365 v9.0内部组织,以触发SDK请求。有时我会收到异常消息:The Security Support Provider Interface (SSPI) negotiation failed
。
我的机器和Dynamics服务器位于不同的域中。提琴手的痕迹表明,这两台计算机都可以在网络中访问。
PFE库中引发了异常,更具体地说是下面的operation()
行。
Parallel.ForEach<TRequest, ParallelOrganizationOperationContext<TRequest, bool>>(requests,
new ParallelOptions() { MaxDegreeOfParallelism = this.MaxDegreeOfParallelism },
() => new ParallelOrganizationOperationContext<TRequest, bool>(),
(request, loopState, index, context) =>
{
try
{
operation(request, threadLocalProxy.Value);
}
catch (FaultException<OrganizationServiceFault> fault)
{
//Track faults locally
if (errorHandler != null)
{
context.Failures.Add(new ParallelOrganizationOperationFailure<TRequest>(request, fault));
}
else
{
throw;
}
}
return context;
},
(context) =>
{
//Join faults together
Array.ForEach(context.Failures.ToArray(), f => allFailures.Add(f));
});
答案 0 :(得分:0)
Sandrino Di Mattia在Early binding tips and tricks for Dynamics CRM 2011文章中提供了一种解决方法:
如果您使用的虚拟机是另一个域的一部分,则可能会出现此错误(跨域调用)。要解决此问题,您需要更改将身份验证参数传递给CrmSvcUtil.exe的方式,而不是使用以下行来调用CrmSvcUtil.exe:
CrmSvcUtil.exe /url:"http:/srv/org/XRMServices/2011/Organization.svc" /out:Context.cs /username:"sandrino" /password:"pass" /domain:"somedomain" /serviceContextName:Context
将其更改为以下内容:
CrmSvcUtil.exe /url:"http:/srv/org/XRMServices/2011/Organization.svc" /out:Context.cs /username:"sandrino@somedomain" /password:"pass" /serviceContextName:Context
通过删除domain参数并将域附加到用户名(用@符号分隔),您将解决跨域问题。