如何在沙箱中运行的CRM2011自定义工作流中修复外部资源的缺失权限?

时间:2013-12-02 09:53:00

标签: dynamics-crm-2011

我的自定义工作流在尝试连接到SQL数据库时失败 - 不是CRM数据库,而是另一个,恰好位于同一服务器实例上。我正在尝试使用SSMS打开与这些凭据的连接:

string strConnect = "server=vm-tlsdev-data;database=TLS_Match;user id=ContactMatch.Test;password=c8NFrZ7L;Trusted_Connection=false;";

SqlConnection sqlClient = newSqlConnection(strConnect);
sqlClient.Open();

Open()方法失败:

未处理的异常:Microsoft.Crm.CrmException:插件的意外异常(执行):TP24408ContactMatch.Workflow.ContactMatch:System.Security.SecurityException:请求类型为'System.Data.SqlClient的权限。 SqlClientPermission,System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'失败。    在Microsoft.Crm.Sandbox.SandboxCodeUnit.Execute(IExecutionContext context)    在Microsoft.Crm.Workflow.Services.ProxyCustomActivity.Execute(CodeActivityContext executionContext)

我已经找到了类似的问题,他们让我想知道问题是否得到了允许在沙箱外“看到”。我想不出一种可行的方式来改变架构,以便一切都在CRM内部或外部;我需要越过边界,工作流程显而易见。

我会很感激任何建议。

3 个答案:

答案 0 :(得分:1)

假设这不在CRM Online中运行,我认为是因为您的SQL连接不是FQDN,您应该能够注册包含自定义工作流活动的DLL以完全信任(而不是沙箱) 。)

答案 1 :(得分:0)

我认为某些应用程序可能正在使用您尝试连接的外部数据库。 为什么不创建一个Web服务,从该外部数据源获取所需的数据,然后在CRM Web资源中使用此服务并处理您的逻辑。 如果不是Web资源,则始终可以选择从自定义工作流活动中调用该服务。

你所看到的问题是因为沙拳的逻辑边界。

答案 2 :(得分:0)

Sandbox中唯一的通信类型是HTTP / HTTPS。您无法访问注册表,文件系统,SQL数据库等。

您还会发现某些DLL无法引用或ILMerged到Sandbox中。

如果要连接到插件或工作流程中的SQL数据库,则必须完全信任注册。