AX2009
Помогите, пожалуйста, понять, как работают InteropPermission и fileIOPermission?
Есть Job. Мне нужно получить путь к временной папке, независимо от того, где исполняется код: на сервере или клиенте.
Для тестирования написала Job запускаю через menuItem c calledFrom = server для исполнения на сервере. И просто по F5 для исполнения на кленте
X++:
static server void My_test (Args _args)
{
FilePath tmpPath;
FileIOPermission fileIOPermission;
InteropPermission perm;
;
// perm = new InteropPermission(InteropKind::ClrInterop);
// perm.assert();
fileIOPermission = new FileIOPermission('','r');
fileIOPermission.assert();
if(isRunningOnServer())
{
info(strFmt('Server'));
tmpPath = WinAPIServer::getTempPath();
}
else
{
info(strFmt('Client'));
tmpPath = WinAPI::getTempPath();
}
//CodeAccessPermission::revertAssert();
info(strFmt('tmpPath %1', tmpPath));
Вопросы
1 ) Почему, если я убираю
X++:
fileIOPermission = new FileIOPermission('','r');
fileIOPermission.assert();
перед if(isRunningOnServer()) , то
получаю ошибку
Request for the permission of type 'FileIOPermission' failed.
(S)\Classes\FileIOPermission\demand
(S)\Classes\WinAPIServer\getTempPath - line 13
То есть, если в моем коде есть FileIOPermission, то вторичный FileIOPermission, что внутри tmpPath = WinAPIServer::getTempPath(); отрабатывает. А как только свои две строки убираю, то выдается эта ошибка.
2) Почему я не могу раскомментировать строки
X++:
// perm = new InteropPermission(InteropKind::ClrInterop);
// perm.assert();
Как только я это делаю, то получаю ошибку (причем, и когда на клиенте исполяняю, и когда на сервере)
Multiple calls to CodeAccessPermission.Assert
(S)\Classes\FileIOPermission\assert
(S)\Jobs\My_test - line 38
(S)\Classes\MenuFunction\runServer
Спасибо