AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2009, 09:26   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Сбой запроса на разрешение типа "FileIOPermission"
Добрый день.

Помогите, пожалуйста, с таким вопросом:

Есть небольшой класс-наследник RunBaseBatch, выгружающий данные в текстовый документ. При запуске его вручную - все выполняется прекрасно, при запуске его в пакетном режиме вываливается ошибка: "Ошибка времени выполнения: AsciiIo Объект не инициализирован" При этом в инфолог пишется следующее: "Сбой запроса на разрешение типа "FileIOPermission".

Вот код метода выгрузки:
X++:
void exportSmth()
{
    str              fileName;
    FileIoPermission perm;
    ;
  
    fileName = "c:\\test.txt";
    perm = new FileIoPermission(fileName, "W");

    perm.assert();

    file = new AsciiIO(fileName,"W");
    file.write("test");

    CodeAccessPermission::revertAssert();
}
в класс декларэйшн file объявлен как AsciiIO.

Поиском пользовался, ответа в других темах, как мне показалось, не нашел.
Старый 09.04.2009, 09:40   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Silphidae Посмотреть сообщение
При запуске его вручную - все выполняется прекрасно, при запуске его в пакетном режиме вываливается ошибка: "Ошибка времени выполнения: AsciiIo Объект не инициализирован" При этом в инфолог пишется следующее: "Сбой запроса на разрешение типа "FileIOPermission".
Пакетный режим выполняется на сервере?
Из-под кого запускается пакетный режим?
Есть ли у этого "кого" права на запись в этот файл?
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 09.04.2009, 09:58   #3  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Да, запускается на сервере. Из под кого знаю. Права у него есть. Спасибо.

Последний раз редактировалось Silphidae; 09.04.2009 в 10:03.
Старый 09.04.2009, 10:03   #4  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Да, еще вот. Если я захожу на сервер под пользователем, который запускает пакетную обработку, и запускаю этот класс вручную - все делается нормально.
Старый 09.04.2009, 10:03   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Да, запускается на сервере. Из под кого не знаю. Подскажите, пожалуйста, как посмотреть из под кого, и есть ли у этого "кого" права. Спасибо.
Пользователь ОС, под которым запускается пакетный режим...
Пользователь ОС, под которым запускается АОС...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Silphidae (1).
Старый 10.04.2009, 15:53   #6  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Проблема все еще не решена. Помогите, пожалуйста.
Старый 10.04.2009, 15:58   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Можно попробовать:
1) Перенести file = new AsciiIO(fileName,"W");
перед созданием perm = new FileIoPermission(fileName, "W");
либо перед perm.assert();
2) Перенести объявление file из Classdeclaration внутрь этого метода.
3) Писать не в корневую директорию C: а скажем в папку C:\\Temp
За это сообщение автора поблагодарили: Silphidae (1).
Старый 10.04.2009, 16:27   #8  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Предложенные три варианта не помогли.
А про модификатор можно подробнее, пожалуйста?
Старый 10.04.2009, 16:05   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Еще вариант, если это только в пакете используется, так дайте классу модификатор client.
Старый 10.04.2009, 16:50   #10  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
А с правами точно всё ок?
Вставьте в код, где идет работа с файлом строки:

info ("User: " + curUserId());
info(isRunningOnServer() ? "Server" : "client");

Если увидите эти инфологи - посмотрите, какой пользователь и права на доступ к файлу\директории
За это сообщение автора поблагодарили: Poleax (1), Silphidae (1).
Старый 10.04.2009, 17:24   #11  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
У пользователя права есть. А вот isRunningOnServer() вернула true. Выходит, проблема именно в том, что класс запускается на сервере. Только не знаю, как ее решить.
Старый 10.04.2009, 17:52   #12  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Решается просто. Метод, который создаёт объект класса (обычно main или construct) должен выполняться на клиенте. А для этого должен иметь модификатор client:

X++:
client static void main(Args args)
.
X++:
client static Tutorial_RunbaseBatch construct()
Возможно, ещё понадобится перекрыть метод canSwapBetweenCS и вернуть true

Последний раз редактировалось DSPIC; 10.04.2009 в 17:55.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 11.04.2009, 17:44   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
А про модификатор можно подробнее, пожалуйста?
как это сделать, уже написали. Как вариант, можно прямо в AOT на классе св-во runOn выставить.
Цитата:
Возможно, ещё понадобится перекрыть метод canSwapBetweenCS и вернуть true
не понадобится. Там и так по умолчанию true возвращается.

Однако, есть возможность запускать в пакете класс, так чтобы он работал и на сервере. Смотрите, под каким пользователем запускается АОС (у меня, network service). Добавляете этого пользователю в соответствующую группу в консоли управления компьютером (можно прямо в Администраторы). Перезапускаете АОС. Теперь файл в корневой директории диска С должен создаваться без проблем. Если же файл создавать не в корневой директории, а в папке, то все работает и без этого. В любом случае, проблема была связана с правами в винде.
Старый 11.04.2009, 19:02   #14  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
не понадобится. Там и так по умолчанию true возвращается.
Ухх, пардон. Хотел написать:

"Возможно, ещё понадобится перекрыть метод canSwapBetweenCS и вернуть FALSE"
Старый 13.04.2009, 12:35   #15  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Спасибо. Решение выставить свойство класса Run On в значение Client вместе с модификатором Client в main (хотя, возможно, это излишне) оказалось правильным. Спасибо еще раз.
Старый 13.04.2009, 13:37   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
оказалось правильным.
(Сорри за оффтоп) Ну и зря. Это не правильное решение, а обходное.
Старый 13.04.2009, 14:11   #17  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
...Ну и зря. Это не правильное решение, а обходное.
Если уж на то пошло, вы считаете что давать учетной записи от которой запущен AOS права локального администратора на сервере
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
...
Однако, есть возможность запускать в пакете класс, так чтобы он работал и на сервере.
...
Добавляете этого пользователю в соответствующую группу в консоли управления компьютером (можно прямо в Администраторы).
более 'правильным' решением?
Очень спорный совет с точки зрения безопасности.
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: Eldar9x (1), Silphidae (1).
Старый 13.04.2009, 14:30   #18  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Очень спорный совет с точки зрения безопасности.
Читайте внимательней
Цитата:
Добавляете этого пользователю в соответствующую группу в консоли управления компьютером (можно прямо в Администраторы)
в администраторы можно добавить только для испытания. Полностью согласен, что добавлять в администраторы на рабочей конфигурации не есть хорошо.
За это сообщение автора поблагодарили: Silphidae (1).
Теги
asciio, ax4.0, fileiopermission, security, безопасность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задать критерий типа !="" bobski DAX: Программирование 3 29.12.2008 08:23
Отчет типа "ОСВ по счету в разрезе аналитики" kosenkov DAX: Функционал 13 02.03.2006 16:57
Странный эффект. OLAP и измерение типа "перечислимый тип" chi DAX: Программирование 1 28.12.2005 12:31
Как при удалении записи из таблицы подавить вывод запроса "Удалить запись?" Anders DAX: Программирование 2 05.05.2004 17:52
Связь типа "!=" в Query Shark DAX: Программирование 1 06.10.2003 12:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:14.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.