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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2019, 12:32   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 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   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Может быть, в методе генерации исходного кода (AifServiceReferenceManager::generate) и его компиляции поставить точку останова после генерации исходного кода но до компиляции и сборки и скопировать куда-нибудь из временных файлов исходных кодов на "правильном" и "ошибочном" серверах и по коду, возмодно, что-то прояснится?
Старый 18.11.2019, 13:30   #3  
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   #4  
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   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 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   #6  
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   #7  
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   #8  
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, время: 01:56.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.