【问题标题】:Failing to access external SQL database from CRM Plugin while debugging调试时无法从 CRM 插件访问外部 SQL 数据库
【发布时间】:2016-05-31 02:01:38
【问题描述】:

我在从 CRM 插件访问外部数据库时遇到问题。 我收到的错误是:

"Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx' failed."

代码在“单元测试”中本地运行良好。我确保将插件隔离模式设置为“无”。 我尝试向 article 寻求帮助,并尝试了它建议的所有方法,但没有成功。

这是我正在使用的当前代码:

var conn = new SqlConnection(@"Server=MyServer\Instance;DataBase=MyDB;User Id=MyUser;Password=MyPassword;Integrated Security=false;");
conn.Open();

我也尝试了这个连接字符串并授予 NT AUTHORITY\NETWORK SERVICE 用户访问数据库的权限。

var conn = new SqlConnection(@"Data Source=MyDS\Instance;Initial Catalog=MyDB;Integrated Security=SSPI;");
conn.Open();

我正在使用 Dynamics CRM 2015 On-Premise。

更新:我在不调试时发现它可以工作,但是当我尝试通过插件注册工具进行调试时出现错误。知道为什么会发生这种情况吗?

【问题讨论】:

  • 请解释一下你是如何工作的。
  • 插件注册工具只有有限的调试能力。它是为 CRM Online 设计的,您不能在其中使用 Visual Studio 的调试选项。在 OnPremise 部署中,使用远程调试或在 CRM 服务器上安装 Visual Studio。最后一种是推荐的方法。
  • @HenkvanBoeijen 它一直在工作。我通过从外部 SQL 读取记录并将其写入实体字段而无需调试成功地对其进行了测试。您能否将您的第二条评论作为答案,以便我将其标记为答案?

标签: debugging dynamics-crm dynamics-crm-2015


【解决方案1】:

SQL 连接需要“完全信任”才能确定 CRM 插件沙箱不在其中运行。

我们运行 CRM 2013 On-Premise,我经常在自定义插件和工作流中调用外部数据库,但为了克服安全问题 - 我创建了一个 Web 服务来处理这些请求。

例如,在更新帐户时调用更新 DB2 中的记录的工作方式如下:

  1. 在 CRM 中更新了帐户记录
  2. 帐户插件已触发
    1. 建立与 MyCompanyWebService 的连接
    2. 调用 UpdateDB2(MyCompanyWebService 中的方法)

当然,您必须开发一个单独的 Web 服务,但(从好的方面)它允许您分离逻辑并且您可以完全控制您的 Web 服务中的信任级别。

【讨论】:

  • 感谢您的回复。我希望通过在沙箱之外运行插件(隔离模式=“无”)它可以阻止我这样做。创建 Web 服务是我最后的选择,但如果这是调用外部数据库的唯一方法,我会这样做。
  • @BrandonTull - 在最终得出 WS 是最佳(实际上唯一可行的)解决方案之前,我完成了您在原始问题中所做的 exact 相同步骤。它实际上已被证明是一件好事,因为我们利用相同的 WS 将功能也公开给其他集成点。
  • 我明白.. 缺点是我将不得不管理另一个 Web 服务,而且我不会有执行简单 SQL 调用的原始速度。
  • @BrandonTull - 不幸的是,这只是做生意的成本。对于它的价值,如果 CRM 和您的 WS 之间的所有流量都是本地的,那么开销应该是非常小的;至少这是我的经验。
  • @JasonFaulkner 您的回答和 cmets 表明这是不可能的。但是,只要插件在 OP 所说的沙箱之外运行,就没有理由直接连接到 SQL 数据库不起作用。这对 OP 不起作用的原因是环境问题,但这不是 CRM 的限制。
【解决方案2】:

该问题看起来像您的代码在部分信任(沙盒)中运行,它甚至在尝试连接到 SQL Server 实例之前就失败了,因为它没有实例化 SqlClient 的权限。

在 Dynamics CRM 2015 On Premise 中,如果您不想在 Sandbox 中运行插件,则不必这样做。沙盒是 Dynamics CRM online 的要求。

您是否尝试在沙盒之外运行?您是否在更改插件隔离后进行了 iisreset?

Here 是一篇更详细的文章。

【讨论】:

  • 我已将其设置为用完沙箱(隔离模式为无)。我没有尝试 iisreset。我会这样做并报告。
  • 我回来更新了。经过一番努力,我发现 Sql 连接正在工作,但是如果我通过插件注册工具对其进行调试,它就无法正常工作。我收到“...SqlClientPermission...Failed”错误。有什么想法吗?
【解决方案3】:

插件注册工具只有有限的调试功能。它是为 CRM Online 设计的,您不能在其中使用 Visual Studio 的调试选项。在 OnPremise 部署中,使用远程调试或在 CRM 服务器上安装 Visual Studio。最后一种是推荐的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2020-11-30
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多