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

时间:2016-02-18 18:17:07

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

我无法从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内部部署。

更新:我发现它在我没有调试时工作,但是当我尝试通过插件注册工具调试时出现错误。对于为什么会发生这种情况的任何想法?

3 个答案:

答案 0 :(得分:3)

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

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

例如,更新帐户时更新DB2中记录的调用将如下所示:

  1. CRM中更新的帐户记录
  2. 帐户插件已解雇
    1. 建立与MyCompanyWebService的连接
    2. 调用UpdateDB2(MyCompanyWebService中的方法)
  3. 当然,您需要开发一个单独的Web服务,但是(好的一面)它允许您分离逻辑,您可以完全控制Web服务中的信任级别。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

在Dynamics CRM 2015内部部署中,如果您不想,您不必在Sandbox中运行插件。 Sandbox仅适用于Dynamics CRM在线。

您是否尝试在沙盒外跑步?在更改插件隔离后你有没有做过iisreset?

Here是一篇包含更多细节的文章。