【问题标题】:How to call Apache NMS from in a sandbox?如何从沙箱中调用 Apache NMS?
【发布时间】:2013-07-14 12:32:13
【问题描述】:

我正在尝试从我的代码 ('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.

【问题讨论】:

    标签: apache dynamics-crm-2011 activemq sandbox apache-nms


    【解决方案1】:

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

    查看Plug-in Isolation, Trusts, and Statistics 上的此 MSDN 页面。看起来可能有一种方法可以通过修改系统注册表项以在正则表达式值中包含 tcp 等来放松网络限制。以下是该页面的摘录。 注意:我自己没有这样做,所以不能肯定它会起作用。

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

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

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

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\SandboxWorkerOutboundUriPattern

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

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

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

    【讨论】:

    • 谢谢,约翰。您对这个限制是正确的,但不幸的是,它不能针对 CRM Online 进行更改。所以它引出了一个问题,“有没有办法让 NMS 通过 http: 与 ActiveMQ 通信?”此外,还引出了一个问题,“NMS 是否还有其他违反安全模型的行为?”
    • 如果您的目标是 CRM Online,您可能会更幸运地在 Azure(或其他地方)托管一个 Web 服务来完成您需要的工作并从您的插件调用该 Web 服务。但是,会带来延迟成本,所以要小心——尤其是因为插件在 CRM 将它们杀死之前有最长的运行时间。
    猜你喜欢
    • 2012-09-24
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多