我无法从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内部部署。
更新:我发现它在我没有调试时工作,但是当我尝试通过插件注册工具调试时出现错误。对于为什么会发生这种情况的任何想法?
答案 0 :(得分:3)
SQL连接需要“完全信任”才能确定CRM插件沙箱无法在其中运行。
我们运行CRM 2013内部部署,我经常在自定义插件和工作流程中调用外部数据库,但为了克服安全问题 - 我创建了一个处理这些请求的Web服务。
例如,更新帐户时更新DB2中记录的调用将如下所示:
当然,您需要开发一个单独的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是一篇包含更多细节的文章。