【问题标题】:changing the values in connection string gives NullReferenceException更改连接字符串中的值会产生 NullReferenceException
【发布时间】:2018-01-19 06:35:46
【问题描述】:

当我在 web.config 的连接字符串中更改用户名、密码和 url 的值时,我得到空引用异常。它适用于环境,但是当我更改这些值时,我得到错误。

<connectionStrings>
  <add name="CRM" connectionString="AuthType=Office365;Url=url; Username=""; Password="" />  
</connectionStrings>

这是连接代码:

public class get
{
    private CrmServiceClient crmSvc = null;
    private IOrganizationService crmService = null;

    public get()
    {
        this.crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["CRM"].ConnectionString);
        this.crmService = this.crmSvc.OrganizationServiceProxy;
    }
}

【问题讨论】:

  • 也许您可以发布之前的连接字符串的值。然后我们可以比较一下。
  • @TuanZaidi 它适用于版本 8,但是当我更改为 v9 时,它会给出该错误。
  • 第 8 版和第 9 版是什么意思?
  • @user3934288 您正在使用 .NET 功能,因此 CRM 版本无关紧要。如果ConnectionStrings["CRM"] 返回一个空值(是吗?)这意味着没有这样的连接字符串。您可能正在查看 错误 配置文件或忘记将其实际部署到生产环境中。
  • 确定连接字符串丢失了吗? 实际异常消息是什么?调用堆栈显示什么?编写代码的方式您无法知道ConfigurationManager 是返回null 还是CrmServiceClient 抛出。贴出Exception.ToString()返回的full异常信息

标签: c# dynamics-crm dynamics-crm-online


【解决方案1】:

您可以添加断点并检查 this.crmSvc.LastCrmErrorthis.crmSvc.LastCrmException 这些可能会为您提供一些关于出了什么问题的小线索

如果您要从 CRM 8.0 迁移到 CRM 9.0,请确保您已完成以下操作:

  1. 将 SDK 文件更新到最新版本(通过 Nuget 或手动更新)
  2. .NET 代码版本更新到 4.6.2+
  3. 强制您的连接使用传输层安全 v1.2 安全策略

以下是强制代码使用 TLS 1.2 的方法:

public class get
{
    private CrmServiceClient crmSvc = null;
    private IOrganizationService crmService = null;

    public get()
    {
        // New line to force TLS 1.2
        System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

        this.crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["CRM"].ConnectionString);
        this.crmService = this.crmSvc.OrganizationServiceProxy;
    }
}

这是我的blog,其中包含相同的步骤和更多文档:)

【讨论】:

  • 与.NET的配置系统无关
  • @PanagiotisKanavos crmSvc 会发生错误,因此当您尝试检索 crmSvc.OrganizationService 时,将返回 NullReferenceException,如原始问题中所述
  • 假设错误出现在第二行,而不是第一行,并且CVrmServiceClient 是在错误状态下创建的。问题的写法表明相反
  • @PanagiotisKanavos 你是对的:这是我的假设,就像我的许多答案一样。 OP 说连接到 CRM8 时连接有效,并且只有更改 CRM9 的 ConnectionString 属性才会出现错误。所以我会假设连接字符串属性被正确读取,因此它是堆栈下方的问题
  • 只需要步骤 1 和 2。 MS 不建议不包含 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 行,因为这将迫使它停留在 1.2 上。因此,将来如果 MS 不允许 1.2,您将拥有编辑代码。除非存在配置问题,否则更新到 .Net 4.6.2 就足够了。另外,VS有时会在调试时缓存设置,所以更新到4.6.2后,你需要在调试前做一个完整的清理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2011-10-15
  • 2020-09-13
相关资源
最近更新 更多