Запрос на разрешение типа «InteropPermission» не выполнен. ».Объект не может быть создан - PullRequest
0 голосов
/ 10 июня 2018

Я хочу интегрировать com объект в Ax 2009.

Я создал DLL с .NET framwork 4.7.Наряду с архитектурой процессора, как и все, сильно подписаны.Зарегистрировал объект com на клиентской машине, так как он отлично работает на клиентской машине.

Затем я беру ту же DLL и регистрирую ее на сервере.Но на этот раз я получаю сообщение.

"“Request for the permission of type ‘InteropPermission’ failed.”. Object can not created.

enter image description here

Даже этот код не работал.

InteropPermission permission = new InteropPermission( InteropKind::ComInterop ).assert();
myDll dll = new myDll();

Ошибка:

As compiler comes over as new method in myDll class it throw error.
"“Request for the permission of type ‘InteropPermission’ failed.”. Object can not created.

enter image description here

public void new ( Com("{123e4567-e89b-12d3-a456-426655440000}"))
{
 ......
}

Больше всего меня удивляет то, что одна и та же DLL работает нормально на клиентском компьютере, но выдает ошибку на сервере.Хотя он зарегистрирован вместе с административными привилегиями.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Без дополнительных трудностей нам сложно отлаживать.Я предлагаю вам обновить Перекрестную ссылку (ссылка 2012 года, но аналогично в AX09) , затем перейти к \System Documentation\Classes\COM\new и затем сделать Used by:

enter image description here

Затем вы увидите множество примеров, где Microsoft использует и создает COM объект, с которым вы можете смоделировать свой.

Примечание Used Byне будет работать, пока вы не обновите перекрестную ссылку (AKA XRef).Скриншоты с AX 2012.

enter image description here

0 голосов
/ 11 июня 2018

Я не уверен, как вы используете .NET Framework 4.7 в AX 2009 - насколько я помню, AX 2009 может работать только с библиотеками .NET 3.5.

Независимо от этого, в этом фрагменте кодане нужно InteropKind::ClrInterop вместо InteropKind::ComInterop?

InteropPermission permission = new InteropPermission(InteropKind::ComInterop).assert();
myDll dll = new myDll();

Что касается обоих скриншотов из вашего вопроса, я не думаю, что вы делаете new InteropPermission(InteropKind::ComInterop).assert() там - на самом деле это не будетвозможно, потому что new COM(...) находится в параметрах, а не в теле метода.Попробуйте переместить свой код o = new COM(...) внутрь метода после строки new InteropPermission(InteropKind::ComInterop).assert().

...