首页 > 解决方案 > 如何在 Dynamics Crm 项目中更改 WS-Trust 安全性

问题描述

我的情况突然我得到:值不能为空。参数名称:尝试获取组织服务时的服务,谷歌搜索后我发现我的项目使用 WS-Trust 安全性,它可能会造成我的问题,

在 ms docs 中阅读后,我发现这可能是我的情况:

如果您正在访问 CrmServiceClient.OrganizationServiceProxy 属性:

删除代码中对该属性的所有使用。CrmServiceClient 实现 IOrganizationService 并公开可以为组织服务代理设置的所有内容。

我的问题是如果我删除我的使用:

 CrmServiceClient crmServiceClient = new CrmServiceClient( connectionString);
IOrganizationService organizationService = (IOrganizationService)crmServiceClient.OrganizationWebProxyClient != null
? (IOrganizationService)crmServiceClient.OrganizationWebProxyClient : (IOrganizationService)crmServiceClient.OrganizationServiceProxy;

可以替代什么?

有人处理这种情况吗?有没有其他方法可以解决它?

标签: authenticationdynamics-crmdynamics-crm-2016

解决方案


您的直接问题可能是由于身份验证问题,例如密码过期。这将导致 Service 属性为空。您可以在使用返回的客户端之前查看 LastCrmError 属性以检测这种情况。我使用过这样的代码:

Microsoft.Xrm.Tooling.Connector.CrmServiceClient c = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connStr);

// At least when using Office365 authentication, invalid (or expired password) will show up in LastCrmError.
// I have not seen LastCrmException, but it sounds bad, too, to check that too.
if (!(string.IsNullOrEmpty(c.LastCrmError) && c.LastCrmException == null))
{
    Console.Error.WriteLine(Environment.NewLine + "CRM Error: " + c.LastCrmError);
    if (c.LastCrmException != null)
    {
        Console.Error.WriteLine("CRM Exception: " + c.LastCrmException.Message);
        Console.Error.WriteLine("CRM Exception details: " + c.LastCrmException.ToString());
    }
    Environment.Exit(99);
}

此代码可能会停止工作,因为删除了 WS-Trust 安全性并升级到较新的 9.2.x SDK,如使用 WS-Trust 安全协议使用 Office365 身份验证中所述

我正在考虑仅使用 IOrganizationService 接口(见下文)中的方法来验证代码的未来,但 CrmLastError 在 IOrganizationProxy 接口中不可用,所以现在我使用上面的代码。但是代码库的其余部分仅依赖于 IOrganizationService 接口,因此代码返工应该是最少的。

IOrganizationService c = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connStr);

推荐阅读