Я пытаюсь вызвать 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.
Спасибо, Джон. Вы правы в этом ограничении, но, к сожалению, он не может быть изменен для CRM Online. Поэтому он задает вопрос: «Есть ли способ заставить NMS связываться с ActiveMQ через http :?» Кроме того, возникает вопрос: «Есть ли что-то еще, что NMS может нарушить модель безопасности?» – PrgTrdr
Если вы настроили таргетинг на CRM Online, вам, возможно, повезло с веб-сервисом в Azure (или в другом месте), который выполняет необходимую работу и вызывая этот веб-сервис из вашего плагина. Тем не менее, при низкой стоимости ожидания, будьте осторожны - особенно потому, что плагины имеют максимальное количество времени, которое они могут выполнять до того, как CRM убьет их. –