2013-07-16 6 views
0

Я пытаюсь вызвать Apache ActiveMQ NMS Version 1.6.0 из моего кода («IntPub»), который должен выполняться в изолированной среде в среде .NET 4.0 по соображениям безопасности. Программа, которая создает песочницу, делает мой код «частично доверенным» и, следовательно, «прозрачным с точки зрения безопасности», который, как представляется, означает, что он не может создать ConnectionFactory (см. Журнал ошибок ниже), поскольку NMS кажется «критически важным для безопасности». Вот код, который вызывает эту ошибку:Как позвонить в Apache 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. 

ответ

1

От ошибки атрибутов сообщения, это выглядит, как вы бежите Dynamics CRM 2011 плагин в изолированном режиме, который имеет некоторые очень специфические правила о том, что вы можете и чего не можете сделать. В частности, вам разрешено делать сетевые подключения только через HTTP и HTTPS, поэтому попытка использования несовместимых сокетов TCP определенно потерпит неудачу.

Взгляните на эту страницу MSDN на странице Plug-in Isolation, Trusts, and Statistics. Похоже, что существует способ смягчить сетевые ограничения, изменив запись в системном реестре, чтобы включить tcp и т. Д. В значение regex. Ниже приведен фрагмент страницы. Примечание: Я сам этого не делал, поэтому не могу сказать наверняка, что это сработает.

Sandboxed plug-ins and custom workflow activities can access the network through the HTTP and HTTPS protocols. This capability provides support for accessing popular web resources like social sites, news feeds, web services, and more. The following web access restrictions apply to this sandbox capability.

  • Only the HTTP and HTTPS protocols are allowed.
  • Access to localhost (loopback) is not permitted.
  • IP addresses cannot be used. You must use a named web address that requires DNS name resolution.
  • Anonymous authentication is supported and recommended. There is no provision for prompting the logged on user for credentials or saving those credentials.

These default web access restrictions are defined in a registry key on the server that is running the Microsoft.Crm.Sandbox.HostService.exe process. The value of the registry key can be changed by the System Administrator according to business and security needs. The registry key path on the server is:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\SandboxWorkerOutboundUriPattern

The key value is a regular expression string that defines the web access restrictions. The default key value is:

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

By changing this registry key value, you can change the web access for sandboxed plug-ins.

+0

Спасибо, Джон. Вы правы в этом ограничении, но, к сожалению, он не может быть изменен для CRM Online. Поэтому он задает вопрос: «Есть ли способ заставить NMS связываться с ActiveMQ через http :?» Кроме того, возникает вопрос: «Есть ли что-то еще, что NMS может нарушить модель безопасности?» – PrgTrdr

+0

Если вы настроили таргетинг на CRM Online, вам, возможно, повезло с веб-сервисом в Azure (или в другом месте), который выполняет необходимую работу и вызывая этот веб-сервис из вашего плагина. Тем не менее, при низкой стоимости ожидания, будьте осторожны - особенно потому, что плагины имеют максимальное количество времени, которое они могут выполнять до того, как CRM убьет их. –

 Смежные вопросы

  • Нет связанных вопросов^_^