【问题标题】:Dynamics 365 SDK throws exception "The Security Support Provider Interface (SSPI) negotiation failed"Dynamics 365 SDK 引发异常“安全支持提供程序接口 (SSPI) 协商失败”
【发布时间】:2019-01-15 22:14:02
【问题描述】:

我通过 Microsoft.Xrm.Sdk + Microsoft.Pfe.Xrm.Core NuGet 包跨 Active Directory 域连接到 Dynamics 365 v9.0 本地组织以触发 SDK 请求。有时我会收到异常回复:The Security Support Provider Interface (SSPI) negotiation failed

我的机器和 Dynamics 服务器位于不同的域中。 Fiddler 跟踪显示两台机器都可以在网络中访问。

异常在 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));
    });

来源:https://github.com/seanmcne/XrmCoreLibrary/blob/8892a9e93c42d8c35aac2a212588d45359cfd1a2/v8/Client/ParallelServiceProxy.cs#L236

【问题讨论】:

    标签: dynamics-crm microsoft-dynamics dynamics-365


    【解决方案1】:

    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
    

    通过删除域参数并将域附加到用户名(用 @ 符号分隔),您将解决跨域问题。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 2011-04-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 2019-07-05
      相关资源
      最近更新 更多