我在从 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。
更新:我在不调试的时候发现它可以工作,但是当我尝试通过插件注册工具调试它时,我得到了错误。知道为什么会发生这种情况吗?
最佳答案
SQL 连接需要“完全信任”才能建立 CRM 插件沙箱不在其中运行的连接。
我们在本地运行 CRM 2013,我经常在自定义插件和工作流程中调用外部数据库,但为了克服安全问题 - 我创建了一个处理这些请求的 Web 服务。
例如,更新帐户时调用更新 DB2 中的记录的工作方式如下:
- 在 CRM 中更新帐户记录
- 帐户插件已启动
- 建立与 MyCompanyWebService 的连接
- 调用 UpdateDB2(MyCompanyWebService 中的方法)
当然,您需要开发单独的 Web 服务,但(好的一面)它允许您分离逻辑,并且您可以完全控制 Web 服务内的信任级别。
关于debugging - 调试时无法从 CRM 插件访问外部 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489351/