调试时无法从 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 中的记录的工作方式如下:
- CRM 中的客户记录已更新
- 已触发帐户插件
- 建立与 MyCompanyWebService 的连接
- 调用 UpdateDB2(MyCompanyWebService 中的方法)
当然,您必须开发单独的 Web 服务,但(好的一面)它允许您分离逻辑,并且您可以完全控制 Web 服务中的信任级别。
这个问题看起来你的代码 运行 部分信任(沙盒),它甚至在尝试连接到 SQL 服务器实例之前就失败了,因为它没有实例化的权限一个 SQL 客户端。
在 Dynamics CRM 2015 On Premise 中,如果您不想,则不必 运行 在 Sandbox 中安装插件。沙盒仅是在线 Dynamics CRM 的要求。
您是否尝试过 运行沙盒之外的环境?也许你在更改插件隔离后做了 iisreset?
Here 是一篇更详细的文章。
插件注册工具只有有限的调试功能。它是为 CRM Online 设计的,您不能在其中使用 Visual Studio 的调试选项。在 OnPremise 部署中,使用远程调试或在 CRM 服务器上安装 Visual Studio。最后一种是推荐的方法。
我在从 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 中的记录的工作方式如下:
- CRM 中的客户记录已更新
- 已触发帐户插件
- 建立与 MyCompanyWebService 的连接
- 调用 UpdateDB2(MyCompanyWebService 中的方法)
当然,您必须开发单独的 Web 服务,但(好的一面)它允许您分离逻辑,并且您可以完全控制 Web 服务中的信任级别。
这个问题看起来你的代码 运行 部分信任(沙盒),它甚至在尝试连接到 SQL 服务器实例之前就失败了,因为它没有实例化的权限一个 SQL 客户端。
在 Dynamics CRM 2015 On Premise 中,如果您不想,则不必 运行 在 Sandbox 中安装插件。沙盒仅是在线 Dynamics CRM 的要求。
您是否尝试过 运行沙盒之外的环境?也许你在更改插件隔离后做了 iisreset?
Here 是一篇更详细的文章。
插件注册工具只有有限的调试功能。它是为 CRM Online 设计的,您不能在其中使用 Visual Studio 的调试选项。在 OnPremise 部署中,使用远程调试或在 CRM 服务器上安装 Visual Studio。最后一种是推荐的方法。