0

我正在尝试从我的代码('IntPub')中调用 Apache ActiveMQ NMS 版本 1.6.0,出于安全原因,该代码必须在 .NET 4.0 环境的沙箱中运行。创建沙箱的程序使我的代码“部分受信任”,因此“安全透明”,这似乎意味着它无法创建 ConnectionFactory(请参阅下面的错误日志),因为 NMS 似乎是“安全关键的”。这是导致此错误的代码:

connecturi = new Uri("tcp://my.server.com:61616"); 
var connectionFactory = new ConnectionFactory(connecturi); 

我也尝试了这个,结果相似:

connecturi = new Uri("activemq:tcp://my.server.com:61616"); 
var connectionFactory = NMSConnectionFactory.CreateConnectionFactory(connecturi); 

由于我无法更改程序集的安全级别(沙箱阻止它),有没有办法让 NMS 作为“安全关键”运行,以便可以通过“安全透明”代码调用?我是否必须重新编译它才能这样做,或者 NMS 是否会执行一些永远不会被视为“安全关键”的操作?

我感谢任何帮助或建议...


Assembly 'IntPub, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6fa620743b8dc60a' is partially trusted, which causes the CLR to make it entirely security transparent regardless of any transparency annotations in the assembly itself.  In order to access security critical code, this assembly must be fully trusted.Detail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220956</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
  <Message>Unexpected exception from plug-in (Execute): Test.Client: System.MethodAccessException: Attempt by security transparent method 'Test.Client.Execute(System.IServiceProvider)' to access security critical method 'Apache.NMS.ActiveMQ.ConnectionFactory..ctor(System.Uri)' failed.
4

1 回答 1

1

从错误消息属性来看,您似乎在沙盒模式下运行 Dynamics CRM 2011 插件,该插件对您可以做什么和不可以做什么有一些非常具体的规则。特别是,您只能通过 HTTP 和 HTTPS 建立网络连接,因此尝试原始 TCP 套接字肯定会失败。

看看这个关于插件隔离、信任和统计的MSDN 页面。看起来可能有一种方法可以通过修改系统注册表项以在正则表达式值中包含 tcp 等来放松网络限制。以下是该页面的摘录。 注意:我自己没有这样做,所以不能肯定它会起作用。

沙盒插件和自定义工作流活动可以通过 HTTP 和 HTTPS 协议访问网络。此功能支持访问流行的 Web 资源,如社交网站、新闻提要、Web 服务等。以下 Web 访问限制适用于此沙盒功能。

  • 仅允许使用 HTTP 和 HTTPS 协议。
  • 不允许访问 localhost(环回)。
  • 不能使用 IP 地址。您必须使用需要 DNS 名称解析的命名网址。
  • 支持并推荐匿名身份验证。没有提示登录用户输入凭据或保存这些凭据的规定。

这些默认的 Web 访问限制在运行 Microsoft.Crm.Sandbox.HostService.exe 进程的服务器上的注册表项中定义。系统管理员可以根据业务和安全需要更改注册表项的值。服务器上的注册表项路径是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\SandboxWorkerOutboundUriPattern

键值是定义 Web 访问限制的正则表达式字符串。默认键值为:

"^http[s]?://(?!((localhost[:/])|([. ])|([0-9]+[:/])|(0x[0-9a-f] +[:/])|(((([0-9]+)|(0x[0-9A-F]+)).){3}(([0-9]+)|(0x[0 -9A-F]+))[:/]))).+";*

通过更改此注册表项值,您可以更改沙盒插件的 Web 访问。

于 2013-07-16T13:08:29.823 回答