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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.11.2018, 12:31   #1  
jonny.do is offline
jonny.do
Участник
 
6 / 11 (1) +
Регистрация: 14.02.2018
Приведение типов в Axapta
Собственно проблема:
Axapta 2009, .NET 3.5 в ней отсутствует SecurityProtocolType::TLS12,
на c# это можно обойти через приведение типов:

Код:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Возможно ли сделать тоже самое в Аксапте? Без этого сторонний сервер не хочет принимать запрос..

X++:
System.Net.ServicePointManager::set_SecurityProtocol(System.Net.SecurityProtocolType::TLS12);
Старый 01.11.2018, 13:18   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,811 / 984 (36) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Можно научить DAX2009 понимать объекты .NET 4*.
В клиента в каталог bin положите файл ax32.exe.config со следующим содержимым:
X++:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
</configuration>
В bin инстанса сервера с таким же содержимым, но с именем Ax32Serv.exe.config
Естественно и клиента и сервер нужно перезапустить.
Именно для работы с TLS12 сделали так, работает как минимум полгода без проблем. Правда что-то у нас пошло не так при прямом указании
X++:
System.Net.SecurityProtocolType::TLS12
поэтому инициируем через распарсивание:
X++:
protocolType = CLRInterop::parseClrEnum(#SystemNetSecurityProtocolType, #Tls12);
где:
X++:
#define.SystemNetSecurityProtocolType('System.Net.SecurityProtocolType')
#define.Tls12('Tls12')
За это сообщение автора поблагодарили: Dreadlock (4), Veter (1), Logger (3), Damn (4).
Старый 08.04.2019, 14:42   #3  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Именно для работы с TLS12 сделали так, работает как минимум полгода без проблем.
Прошло ещё 5 месяцев с момента вашего поста.
Продолжает ли работать ваш способ с файлами ax32*.exe.config ?
Вы всем пользователям при установке клиента аксапты дополнительно копируете эти конфиг-файлы ?
Глобальная компиляция не выдаёт ошибки ?
Используете ли из .NET Framework 4.5 что-то ещё помимо Tls12 ?
__________________
Дмитрий
Старый 08.04.2019, 21:02   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,811 / 984 (36) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Damn Посмотреть сообщение
Прошло ещё 5 месяцев с момента вашего поста.
Ничего себе, время летит.
Цитата:
Сообщение от Damn Посмотреть сообщение
Продолжает ли работать ваш способ с файлами ax32*.exe.config
Неделю назад, когда я расстался с работодателем, в котором это делали, все работало абсолютно без проблем.
Цитата:
Сообщение от Damn Посмотреть сообщение
Вы всем пользователям при установке клиента аксапты дополнительно копируете эти конфиг-файлы ?
Нет, код работает на сервере, поэтому настроены только АОСы. Для клиентов конфиги сделаны только там, где работают разработчики (как на серверах RDP, так и Citrix) и там, где выполняется глобальная компиляция.
Цитата:
Сообщение от Damn Посмотреть сообщение
Глобальная компиляция не выдаёт ошибки ?
Нет, не выдает, так как конфиги сделаны на тех клиентах, на которых есть шанс, что будет запущена компиляция.
Цитата:
Сообщение от Damn Посмотреть сообщение
Используете ли из .NET Framework 4.5 что-то ещё помимо Tls12 ?
Каким-то специальным образом нет, но когда добавляешь какой-то референс, Аксапта берет библиотеку именно 4.5. Заметили это по тем разраотчикам, которые работают удаленно через Цитрикс - если у постоянных разработчиков все было настроено, то в Цитрикс не сразу сделали эти настройки и у удаленных разработчиков с новыми референсами выдавались ошибки в случае, если используемые объекты NET в 4.5 изменились по сравнению с 3.5. То есть, использование каких-то специфичных для 4.5 особенностей прямым образом не задавались, но эффект получили.

Последний раз редактировалось Raven Melancholic; 08.04.2019 в 21:04.
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 10.04.2019, 16:11   #5  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
но когда добавляешь какой-то референс, Аксапта берет библиотеку именно 4.5.
Имеются в виду референсы на веб-сервисы или на dll ?
Что-то у нас референсы на веб-сервисы после восстановления перестали работать.
Не получается инициализировать soap client.
Убираем конфиг-файл из АОСа, восстанавливаем референсы и они снова начинают работать корректно.
__________________
Дмитрий
Старый 11.04.2019, 09:33   #6  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Цитата:
Сообщение от Damn Посмотреть сообщение
Не получается инициализировать soap client.
Если быть точным, то получаем вот такую ошибку :
"Не удалось найти файл App.config в местоположении сборки на сервере. Наиболее вероятной причиной этого является код, выполняющийся на уровне клиента. Запустите код на уровне сервера."
Вдруг кто-то сталкивался. Код выполняется на сервере.
__________________
Дмитрий
За это сообщение автора поблагодарили: Logger (1).
Старый 11.04.2019, 10:01   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,811 / 984 (36) +++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Damn Посмотреть сообщение
Имеются в виду референсы на веб-сервисы или на dll ?
Что-то у нас референсы на веб-сервисы после восстановления перестали работать.
Тут не помогу, использовали только ссылки на обычные DLL. Даже для WEB сервисов не использовали возможность DAX2009 задавать ссылки на сервис, чтобы Акса сама там сформировала код C# и скомпилировала его.
Для WEB сервисов брали либо готовые NET сборки (например, для MS Exchange библиотеку EWS от Microsoft - кстати, вот еще пример, когда понадобилась версия выше, чем поддерживает DAX2009) либо писали сами такие оболочки, либо в самой Аксапте выполняли все, что нужно для вызова сервиса.
Старый 21.10.2019, 18:32   #8  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
X++:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
</configuration>
Можно ли как-то программно вытаскивать значения этих параметров из конфиг-файла ?
Чтобы понимать в каком АОСе мы сейчас находимся. С поддержкой Framework 4.5 или без поддержки.
__________________
Дмитрий
Старый 22.10.2019, 06:34   #9  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
245 / 291 (10) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от Damn Посмотреть сообщение
Можно ли как-то программно вытаскивать значения этих параметров из конфиг-файла ?
Чтобы понимать в каком АОСе мы сейчас находимся. С поддержкой Framework 4.5 или без поддержки.
Я думаю, без проблем. В Аксапте же можно открыть и прочитать файл, который находится в файловой системе. Главное, что бы был соответствующий доступ у пользователя, под которым работает АОС.

PS. Этот вариант как раз напомнил мне проблему, когда неопытнай разработчик не совсем понимает, что его код может работать на разных компьютерах и пытается прочитать клиентский файл из кода, который работает на сервере. А может наоборот, эта проблема напомнила про такой вариант

Последний раз редактировалось AlexSD; 22.10.2019 в 06:39.
Старый 22.10.2019, 08:23   #10  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Я думал может есть какой-нибудь красивый вариант получения свойства supportedRuntime из конфиг-файла, который использовал автор темы.
Например, с помощью System.Configuration или ещё каких-нибудь встроенных вещей.
А так конечно придётся просто файл считывать.
__________________
Дмитрий
Старый 22.10.2019, 12:07   #11  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
281 / 370 (13) ++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Можно примерно так (правда код проверял только на AX 2012 и версия .net 4.0, может быть и на 3.5 будет работать), но все равно саму секцию придется парсить как xml.

X++:
static void getStartupSectionInfo(Args _args)
{
    System.Configuration.ConfigurationSection           section;
    System.Configuration.SectionInformation             sectionInfo;
    System.Configuration.Configuration                  curConfig;
    System.Configuration.ConfigurationSectionCollection sections;
    str                                                 strValue;
    MenuFunction                                        menuFunction;

    if (! isRunningOnServer())
    {
        menuFunction = ClassFactory::makeObjectOnServer(classNum(MenuFunction));
        menuFunction.objectType(MenuItemObjectType::Job);
        menuFunction.object(funcname());
        menuFunction.runOn(2);
        menuFunction.run();

        return;
    }
    
    curConfig = System.Configuration.ConfigurationManager::OpenExeConfiguration(System.Configuration.ConfigurationUserLevel::None);
    
    if (curConfig)
    {
        sections = curConfig.get_Sections();
    
        if (sections)
        {
            section = sections.get_Item('startup');
        
            if (section)
            {
                sectionInfo = section.get_SectionInformation();
                strValue = sectionInfo.GetRawXml();
            
                info(strValue);
            }
        }
    }
    
    info("done");
}
Если хочется совсем на уровне коллекции работать с разделом startup, то тут скорее только через внешнюю библиотеку.
__________________
Sergey Nefedov,
IT Magnet
Старый 23.10.2019, 09:15   #12  
Damn is offline
Damn
Участник
 
374 / 105 (4) +++++
Регистрация: 28.05.2003
Адрес: Москва
Понятно. Самый простой способ - считывать файл и парсить его с помощью XMLDocument.
Название файла фиксировано, находится он всегда в одной и той же папке - xInfo::directory( DirectoryType::Bin) .
__________________
Дмитрий
Теги
c#, securityprotocoltype, x++, фсс, элн

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Приведение типов для таблиц ax2012 Logger DAX: Программирование 13 28.09.2018 12:39
axaptacorner: Dynamics Axapta History Blog bot DAX Blogs 0 15.06.2012 17:11
приведение типов при ClearRange murad DAX: Программирование 2 06.05.2006 11:40
приведение типов в select simply2double DAX: Программирование 3 30.09.2004 11:24
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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