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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.11.2008, 17:39   #1  
Vhaldemar is offline
Vhaldemar
Участник
 
8 / 22 (1) +++
Регистрация: 04.11.2008
Code Access Security - ошибка Best Practice
Господа, помогите пожалуйста!

Проблема суть следующая: есть класс, свойство RunOn = 'Called from'.
В методе run используется объект класса TextIO:

void run()
{
TextIO logFile;

;

logFile = new TextIo("c:\\temp\\vhAPI_log.log", 'W');

}

При компиляции появляется ошибка Best Practice следующего содержания:
"TwC: Assert usage of API TextIo.new because it is protected by Code Access Security"

ВОПРОС: как нужно модифицировать код, чтобы этот Best Practice исчез?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
1. Использование //BP deviation documented лишь преобразует error Best Practice в info Best Practice.
2. Использование соответсвующего "permission" ошику Бест Практиз не убирает
void run()
{
TextIO logFile;
FileIOPermission permission;

;

permission = new FileIOPermission("c:\\temp\\vhAPI_log.log", 'W');
permission.assert();

// invoke protected API
logFile = new TextIo("c:\\temp\\vhAPI_log.log", 'W');

}
3. Единственно когда ошибка НЕ появляется: если RunOn класса = "Client"
или метод, использующий TextIO является client static

Заранее спасибо!
Старый 04.11.2008, 18:02   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А если permission.assert() сделать непосредственно перед new TextIO?
Старый 04.11.2008, 18:15   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vhaldemar Посмотреть сообщение
При компиляции появляется ошибка Best Practice следующего содержания:
"TwC: Assert usage of API TextIo.new because it is protected by Code Access Security"
У вас Аксапта 4.0
В ней были изменены правила доступа кода к файловой системе, WinAPI, буферу обмена и т.п.
Для того, чтобы TextIO работал, его надо обрамить специальным классом.

Об этом хорошо написано в хелпе.
Например, здесь http://msdn.microsoft.com/en-us/libr...36(AX.10).aspx

Пример как надо обрамлять
X++:
public void run()
{
    QueryRun                qr;
    FileIoPermission        _perm = new FileIoPermission("c:\\000\\test.txt",'w');
    TextBuffer              textBuffer = new TextBuffer();
;

    qr = this.queryRun();
    while( qr.next() )
    {
        ...
        textBuffer.appendText("...something...");
    }

    _perm.assert();
    textBuffer.toFile("c:\\000\\test.txt");
    CodeAccessPermission::revertAssert();
}
__________________
полезное на axForum, github, vk, coub.
Старый 04.11.2008, 18:43   #4  
Vhaldemar is offline
Vhaldemar
Участник
 
8 / 22 (1) +++
Регистрация: 04.11.2008
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А если permission.assert() сделать непосредственно перед new TextIO?
В том то и дело что .assert() делал непосредственно перед new TextIO..
Старый 04.11.2008, 19:30   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vhaldemar Посмотреть сообщение
В том то и дело что .assert() делал непосредственно перед new TextIO..
Объявление переменной FileIoPermission в тексте метода должно стоять ДО объявления переменной TextIO.
__________________
полезное на axForum, github, vk, coub.
Старый 05.11.2008, 10:59   #6  
Vhaldemar is offline
Vhaldemar
Участник
 
8 / 22 (1) +++
Регистрация: 04.11.2008
Цитата:
Сообщение от mazzy Посмотреть сообщение
Объявление переменной FileIoPermission в тексте метода должно стоять ДО объявления переменной TextIO.
К сожалению это не влияет на присутвсвие TWC Best Practice: я объявил переменную FileIoPermission до переменной TextIO, но увы, вышеупомянутая ошибка Best Practice осталась..

Почему тогда она(ошибка) исчезает если RunOn класса = "Client"??

В принципе, если Best Practice о чем-то "ругает", то должен существовать подход, позволяющий этой "ругани" избежать, или я что-то не понимаю?
Старый 05.11.2008, 11:05   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Vhaldemar Посмотреть сообщение
увы, вышеупомянутая ошибка Best Practice осталась..
Почему тогда она(ошибка) исчезает если RunOn класса = "Client"??
Одна из Best Practices - читать документацию и использовать поиск по форуму
Цитата:
Сообщение от Vhaldemar Посмотреть сообщение
В принципе, если Best Practice о чем-то "ругает", то должен существовать подход, позволяющий этой "ругани" избежать, или я что-то не понимаю?
Конечно, такой подход существует - он описан в документации, в частности, в Dynamics AX Writing Secure X++ Code
Старый 05.11.2008, 11:07   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
А если поставить breakpoint в соответствующем классе SysBPCheckXXXXX и посмотреть причину...?
(чисто технический подход )
Старый 05.11.2008, 11:08   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, ругань происходит, потому что если код работает с RunOn != Client, то это значит, что он может теоретически выполнятся на сервере, и пути будут уже не клиентские, а серверные. И файлы - серверные. А все, что касается сервера приложений, должно быть защищено - и это, думаю, разумно.
Соответственно, работать с файлами на сервере является Bad Practice.

По поводу же избежания - это сделать можно - если посмотрите класс WinAPIServer - увидите, что там нормально работает работа с файлами.
Старый 05.11.2008, 11:48   #10  
Vhaldemar is offline
Vhaldemar
Участник
 
8 / 22 (1) +++
Регистрация: 04.11.2008
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Одна из Best Practices - читать документацию и использовать поиск по форуму Конечно, такой подход существует - он описан в документации, в частности, в Dynamics AX Writing Secure X++ Code
Полностью с Вами согласен
"Dynamics AX Writing Secure X++ Code" документ мне знаком: в нем то и описываются(равно как и в msdn) пермишн-классы для всех "опасных" API в Аксапте, в том числе и FileIOPermission..

Непонятно только следующее: класс CCHTMLSave, sys-layer, runOn = "Called from", метод run(), в общем, аналогичная моей ситуация, ОДНАКО в качестве "антидота" на TWC Best Practice используется..правильно, //BP Deviation Documented

Причем это не единственный класс в DAX 4.0 с подобным подходом.
Получается что в данной ситуации - использование //BP единственный выход??
Теги
best practice, cas, secure api, twc

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при подсоединении к Access coolibin DAX: Программирование 2 13.12.2007 16:04
Inside Dynamics AX 4.0: The Security Framework Blog bot DAX Blogs 0 31.10.2007 11:40
casperkamal: Code Access security Blog bot DAX Blogs 0 10.11.2006 01:36
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:07.