调试时无法从 CRM 插件访问外部 SQL 数据库

Failing to access external SQL database from CRM Plugin while debugging

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

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

代码在“单元测试”中本地运行良好。我确保将插件隔离模式设置为“none”。 我试着向这个 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。

更新: 我发现它在我没有调试的时候工作,但是当我尝试通过 插件注册调试它时出现错误工具。知道为什么会这样吗?

SQL 连接需要 "full trust" 才能建立,CRM 插件沙箱 运行 不在其中。

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

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

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

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

这个问题看起来你的代码 运行 部分信任(沙盒),它甚至在尝试连接到 SQL 服务器实例之前就失败了,因为它没有实例化的权限一个 SQL 客户端。

在 Dynamics CRM 2015 On Premise 中,如果您不想,则不必 运行 在 Sandbox 中安装插件。沙盒仅是在线 Dynamics CRM 的要求。

您是否尝试过 运行沙盒之外的环境?也许你在更改插件隔离后做了 iisreset?

Here 是一篇更详细的文章。

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