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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.06.2019, 13:46   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Продолжаем попытки подружить AX2009 с AX2012 через сервис.

Что удалось выяснить.
1) При добавлении референса, AX2009 добавляет его по адресу %programFiles%\Microsoft Dynamics AX\50\Application\Appl\%NameApp%\ServiceReferences\%NameService%
2) При работе с %NameService%, почему-то ищет в %programFiles%\Microsoft Dynamics AX\50\Server\%NameAOS%\Bin. Причем это только для сервиса из AX2012.
3) Оказалось, что callContext нужно все таки инициализировать
X++:
callContext = new Tutorial.CallContext()
Вопрос, где производиться настройка, чтобы AX2009 смотрела %programFiles%\Microsoft Dynamics AX\50\Application\Appl\%NameApp%\ServiceReferences\%NameService%, а не %programFiles%\Microsoft Dynamics AX\50\Server\%NameAOS%\Bin?
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 15.11.2019, 17:55   #2  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
?
Цитата:
Сообщение от demianimp Посмотреть сообщение
Вопрос, где производиться настройка, чтобы AX2009 смотрела %programFiles%\Microsoft Dynamics AX\50\Application\Appl\%NameApp%\ServiceReferences\%NameService%, а не %programFiles%\Microsoft Dynamics AX\50\Server\%NameAOS%\Bin?
Оказалось, что вопрос все еще актуальный.
Есть несколько одинаковых версий серверов. На одних работает, на других нет.
На которых работает смотрит в папку %programFiles%\Microsoft Dynamics AX\50\Application\Appl\%NameApp%\ServiceReferences\%NameService%, а на которых отказывается работать смотрит %programFiles%\Microsoft Dynamics AX\50\Server\%NameAOS%\Bin.

Кто знает, от чего это зависит?
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 17.11.2019, 12:32   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от demianimp Посмотреть сообщение
Вопрос, где производиться настройка, чтобы AX2009 смотрела %programFiles%\Microsoft Dynamics AX\50\Application\Appl\%NameApp%\ServiceReferences\%NameService%, а не %programFiles%\Microsoft Dynamics AX\50\Server\%NameAOS%\Bin?
Судя по всему, нигде не задается.
Если посмотреть код Microsoft.Dynamics.IntegrationFramework.WebService.WebReferenceBase.Init, то видно, что указанная ошибка выдается:
X++:
protected void Init(string webReferenceName, string wcfSoapClientType, string endpointConfiguration)
{
	Assembly callingAssembly = Assembly.GetCallingAssembly();
	string directoryName = Path.GetDirectoryName(callingAssembly.Location);
	string path = string.Format(CultureInfo.InvariantCulture, CONFIG_FILE_FORMAT, directoryName);
	if (!File.Exists(path))
	{
		throw new FileNotFoundException(resourceMgr.GetString("Consume_WS_AppConfig_NotFound"));
	}
То есть, что-то разное на разных серверах дает Assembly.GetCallingAssembly().Location
В https://docs.microsoft.com про GetCallingAssembly и Location есть примечания про разницу возвращаемых значений для "расширяется встроенным образом," "теневое копирование" и прочих. Для меня эти термины темный лес, может подскажут что-то те, кто хорошо знает NET.
Старый 17.11.2019, 12:34   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Может быть, в методе генерации исходного кода (AifServiceReferenceManager::generate) и его компиляции поставить точку останова после генерации исходного кода но до компиляции и сборки и скопировать куда-нибудь из временных файлов исходных кодов на "правильном" и "ошибочном" серверах и по коду, возмодно, что-то прояснится?
Старый 18.11.2019, 13:30   #5  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от Damn Посмотреть сообщение
Предлагаю всё-таки определить в этом дело или нет.
Если на АОСе действительно включена поддержка .NET Framework 4.5, то я например у себя заменил штатный механизм генерации референсов на веб-сервисы. Использую утилиты svcutil.exe и csc.exe. Можно взять утилиты от версии 3.5 (для использования на всех АОСах). А можно взять утилиты от версии 4, их можно использовать только на АОСах с поддержкой .NET Framework 4.5.
Утилиты разных версий генерят немного разные прокси-dll. Отличия перечислять не буду, но они есть.
Внешне для разработчика у меня генерация референсов не изменилась. Тот же диалог, те же сообщения, только файл app.config генерится пустой, так как он не используется. Биндинги и endpoint нужно программно создавать при инициализации soapClient.
Да, на серверах действительно включен .NET Framework 4.5, но на каких-то работает, а на каких-то нет.

Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Судя по всему, нигде не задается.
То есть, что-то разное на разных серверах дает Assembly.GetCallingAssembly().Location
X++:
    System.Reflection.Assembly  callingAssembly;
    ;
    new InteropPermission(InteropKind::ClrInterop).assert();
    callingAssembly = System.Reflection.Assembly::GetCallingAssembly();
    info(callingAssembly.get_Location());
На сервере возвращает C:\Program Files\Microsoft Dynamics AX\50\Server\%AosName%\Bin\Microsoft.Dynamics.ClrBridge.dll

Т.е. по идее и сейчас должна возвращаться ошибка.
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 18.11.2019, 13:43   #6  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от demianimp Посмотреть сообщение
Да, на серверах действительно включен .NET Framework 4.5, но на каких-то работает, а на каких-то нет.
Работает на тех серверах, на которых не запускался механизм создания или обновления референса.
DLL, сгенерированная на АОСе в режиме поддержки Framework 3.5, корректно работает на любых АОСах.
DLL, сгенерированная на АОСе в режиме поддержки Framework 4.5, не будет работать ни на каком АОСе.

Почему у вас на каких-то серверах включена поддержка Framework 4.5, а на каких-то выключена ? Что вы используете из 4.5 ?
__________________
Дмитрий
Старый 18.11.2019, 13:46   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от demianimp Посмотреть сообщение
На сервере возвращает C:\Program Files\Microsoft Dynamics AX\50\Server\%AosName%\Bin\Microsoft.Dynamics.ClrBridge.dll
Т.е. по идее и сейчас должна возвращаться ошибка.
Не, тут-то как раз все хорошо - Microsoft.Dynamics.ClrBridge.dll действительно находится в ...\bin и при вызове из кода X++ этот ClrBridge является посредником, чья сборка выполняется.
Я имел ввиду, что WebReferenceBase.Init вызывается из прокси WEB сервиса, который находится в Appl...ServiceReferences... и, по хорошему, location должен вернуть его местонахождение, а там же лежит *.config. Но, в каких-тор случаях что-то явно идет не так и Assembly.GetCallingAssembly() почему-то считает, что он выполняется не в контексте прокси, а в контексте какой-то сборки из bin.
А вот почему он так считает, тут уже мне знаний не хватает.
Старый 18.11.2019, 13:53   #8  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от Damn Посмотреть сообщение
Работает на тех серверах, на которых не запускался механизм создания или обновления референса.
DLL, сгенерированная на АОСе в режиме поддержки Framework 3.5, корректно работает на любых АОСах.
DLL, сгенерированная на АОСе в режиме поддержки Framework 4.5, не будет работать ни на каком АОСе.

Почему у вас на каких-то серверах включена поддержка Framework 4.5, а на каких-то выключена ? Что вы используете из 4.5 ?
4.5 включен на всех серверах, это и смущает, что на одних работает, а на других нет.

Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не, тут-то как раз все хорошо - Microsoft.Dynamics.ClrBridge.dll действительно находится в ...\bin и при вызове из кода X++ этот ClrBridge является посредником, чья сборка выполняется.
Я имел ввиду, что WebReferenceBase.Init вызывается из прокси WEB сервиса, который находится в Appl...ServiceReferences... и, по хорошему, location должен вернуть его местонахождение, а там же лежит *.config. Но, в каких-тор случаях что-то явно идет не так и Assembly.GetCallingAssembly() почему-то считает, что он выполняется не в контексте прокси, а в контексте какой-то сборки из bin.
А вот почему он так считает, тут уже мне знаний не хватает.
X++:
string directoryName = Path.GetDirectoryName(callingAssembly.Location);
Разве не будет возвращать всегда C:\Program Files\Microsoft Dynamics AX\50\Server\%AosName%\Bin\ ? Или что-то не понял
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Старый 18.11.2019, 14:07   #9  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от demianimp Посмотреть сообщение
4.5 включен на всех серверах, это и смущает, что на одних работает, а на других нет.
В таком случае я не понимаю как у вас вообще вызов веб-сервисов работает на каких-то серверах. Система в этом случае всегда будет лезть в каталог Bin и не находить там ничего.
Класс AifServiceReferenceManager модифицирован ?
Давно включена поддержка Framework 4.5 в конфиг-файлах АОСов ? С тех пор как она включена - перегенерялись ли какие-либо другие референсы веб-сервисов ? Может какие-то прежние разработчики засунули файл app.config в Bin и вставили в него настройки для всех существовавших на тот момент веб-сервисов ?
На вашем клиентском компьютере в конфиг-файле клиента аксапты тоже включена ?
Тестовые вызовы веб-сервисов делаете из серверного класса ?
__________________
Дмитрий
Старый 18.11.2019, 14:16   #10  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от Damn Посмотреть сообщение
В таком случае я не понимаю как у вас вообще вызов веб-сервисов работает на каких-то серверах. Система в этом случае всегда будет лезть в каталог Bin и не находить там ничего.
Я тоже не понимаю
Цитата:
Сообщение от Damn Посмотреть сообщение
Класс AifServiceReferenceManager модифицирован ?
Нет
Цитата:
Сообщение от Damn Посмотреть сообщение
Давно включена поддержка Framework 4.5 в конфиг-файлах АОСов ?
Давно
Цитата:
Сообщение от Damn Посмотреть сообщение
С тех пор как она включена - перегенерялись ли какие-либо другие референсы веб-сервисов ? Может какие-то прежние разработчики засунули файл app.config в Bin и вставили в него настройки для всех существовавших на тот момент веб-сервисов ?
Это новый референс веб-сервиса
Цитата:
Сообщение от Damn Посмотреть сообщение
На вашем клиентском компьютере в конфиг-файле клиента аксапты тоже включена ?
Да
Цитата:
Сообщение от Damn Посмотреть сообщение
Тестовые вызовы веб-сервисов делаете из серверного класса ?
Да
__________________
Любую техническую проблему можно решить, если есть достаточно времени и денег.
Теги
ax2009, ax2012, web service

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 AIF HTTP WebService и их вызов из AX2009 Dmytro.Semenakha DAX: Программирование 2 29.03.2016 09:38
Перенос и адаптация кода с Ax2009 на Ax2012 R3 matew DAX: Прочие вопросы 10 23.01.2015 19:52
Deploy reports to SRS при одновременно установленной AX2009 и ax2012 mazzy DAX: Администрирование 3 18.12.2012 15:50
emeadaxsupport: AX2012 and AX2009 or AX4 side by side - AOS performance counters overwritten Blog bot DAX Blogs 0 13.03.2012 18:11
Перенос данных из AX2009 в AX2012 trud DAX: Администрирование 3 21.02.2012 12:35
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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