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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.08.2020, 12:18   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ax2009: Как обновить(!) Service Reference не перегружая AOS? (не привлекая внимания санитаров)
Идет разработка веб-сервиса (если важно, то разработка в ax2012)
поэтому у веб-сервиса постоянно появляются классы-методы и происходит изменение интерфейсов.

в ax2009 можно зарегистрировать веб-сервис.
ax2009 автоматом кладет исходники и dll в %Appl%\ServiceReferences\%myWebService%

и пока не было выполнения на сервере, этот reference в ax2009 можно даже обновить (правая кнопка мыши \ Regenerate)

но как только выполнили веб-сервис на AOS - сливай воду, туши свечи - нужно перегружать AOS, если хочется обновить веб-сервис на ax2009

Метод AifWebReferenceUtil.copyServiceReferenceToAOS() сообщает:
".Net assembly is locked by AOS, please restart AOS to load the new generated assembly."

бесит.
кто и как боролся с этим?
__________________
полезное на axForum, github, vk, coub.
Старый 27.08.2020, 13:19   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Видел такие мучения. Коллега в 2009-й делал по другому.
Просто генерил новую dll со сборкой. Имя было новое. Грузил ее в память и вызывал нужные методы через дотнетные аналоги SysDictClass. На первый взгляд неудобно, но нужно было 1-2 метода и его это устраивало. По совокупности гемора оказалось меньше.

Не уверен что так и надо в вашем случае, но как крайний вариант...
Старый 27.08.2020, 13:26   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Еще на этапе разработки можно код сделать клиентским. Тогда возможно удастся обойтись только рестартом клиента без рестарта аоса.
Старый 27.08.2020, 13:56   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Просто генерил новую dll со сборкой. Имя было новое.
добавить еще один референс с другим именем можно
но выполнить любой веб-сервис можно только на сервере.
чтобы сервер узнал о новом референсе с таким же веб-сервисом, нужно перегрузить АОС.
а это привлекает санитаров.


Цитата:
Сообщение от Logger Посмотреть сообщение
Грузил ее в память и вызывал нужные методы через дотнетные аналоги SysDictClass. На первый взгляд неудобно, но нужно было 1-2 метода и его это устраивало.
да, такой вариант рассматривался.
но такой подход напрочь лишает всех преимуществ intelliSence,
убирает статический контроль и отменяет контракты.

ну, и всю религию веб-сервиса надо свести к 1-2 методам.
а остальное в рантайме.

при таком подходе скрипач (веб-сервис с WCF) не нужен.
вполне можно юзать что-нибудь более традиционное.

Цитата:
Сообщение от Logger Посмотреть сообщение
По совокупности гемора оказалось меньше.
По совокупности гемора больше, поскольку все проверки на соблюдение контрактов уходят в рантайм.
Нет, конечно можно "ничего не проверять"...

Но может можно обновить Service Reference НЕ перегружая AOS?
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 27.08.2020 в 14:06.
Старый 27.08.2020, 15:34   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от mazzy Посмотреть сообщение
добавить еще один референс с другим именем можно
но выполнить любой веб-сервис можно только на сервере.
чтобы сервер узнал о новом референсе с таким же веб-сервисом, нужно перегрузить АОС.
а это привлекает санитаров.
Там все было более радикально.
usdl ссылка скармливалась .Net библиотеке, которая генерила dll - обертку.
Далее все работа шла с этой dll. т.е. референса не было вообще. Конечно никакого Intellisence не было. Код мог работать как на клиенте так и на сервере. Авторизация тоже была возможна, а не как сейчас, только анонимные подключения.
Старый 27.08.2020, 16:34   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
Там все было более радикально.
В ax2009 можно увидеть пример такой реализации в мексиканском семействе объектов EInvoiceCFDI*
Правда "мексы" не от хорошей жизни так сделали - им нужна была авторизация по сертификату
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 27.08.2020 в 16:49.
За это сообщение автора поблагодарили: Logger (3).
Старый 27.08.2020, 18:23   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
как только выполнили веб-сервис на AOS - нужно перегружать AOS, если хочется обновить веб-сервис на ax2009
Цитата:
Сообщение от mazzy Посмотреть сообщение
Но может можно обновить Service Reference НЕ перегружая AOS?
В данном случае "обновить Service Reference" - это выгрузить одну .NET-сборку и загрузить другую с тем же именем, но другим кодом внутри, правильно? CLR умеет выгружать сборки только вместе с AppDomain, в который(е) они загружены. В AX2012 на такой случай сделали настройку Allow hot swapping of assemblies when the server is running, которая заставляет AOS создавать новый AppDomain на каждую новую клиентскую сессию - и выгружать этот AppDomain, когда соотв. сессия завершается. В AX2009 такой возможности нет, насколько я помню, так что остается разве что перезагружать AOS. Как при этом не привлекать внимание санитаров? А запустить "свой собственный" AOS прям... хоть из ком.строки, на отдельном TCP-порту, проверять сервис, потом прибивать AOS по Ctrl-Break в консоли. Как минимум, другим пользователям это помешать не должно.
За это сообщение автора поблагодарили: mazzy (2), EVGL (1), Logger (4).
Старый 27.08.2020, 21:11   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
В данном случае "обновить Service Reference" - это выгрузить одну .NET-сборку и загрузить другую с тем же именем, но другим кодом внутри, правильно?
не только. нужен intelliSence и прочие радости разработки с WCF и групповой разработки в частности.

Цитата:
Сообщение от mazzy Посмотреть сообщение
но такой подход напрочь лишает всех преимуществ intelliSence,
убирает статический контроль и отменяет контракты.
=================

Цитата:
Сообщение от gl00mie Посмотреть сообщение
А запустить "свой собственный" AOS прям... хоть из ком.строки, на отдельном TCP-порту, проверять сервис, потом прибивать AOS по Ctrl-Break в консоли. Как минимум, другим пользователям это помешать не должно.
так я еще не извращался
знатное курево

но мысль с отдельным AOS - продуктивная.
Действительно стоит попробовать поставить второй АОС в кластер и перегружать только его.
И вообще каждому разработчику свой АОС в кластере!
Эк меня заносит

Спасибо за совет.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 27.08.2020 в 21:17.
Старый 19.10.2020, 20:11   #9  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Сам не пробовал, но нашел интересную статейку по этому поводу.
Там кстати тоже ссылочка есть на hot swapping assembies without AOS restart, про которую gl00mie писал.
https://daxmusings.codecrib.com/2011...eployment.html
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
AIF: Microsoft Dynamics AX Services and Windows Azure Service Bus Blog bot DAX Blogs 0 24.07.2013 03:13
emeadaxsupport: AX for Retail 2012 R2: Installing the Real-time Service Blog bot DAX Blogs 0 19.12.2012 11:11
DynamicsAxSCM: Service products in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 2 02.06.2011 13:36
Pokluda: Outbound web service (AIF) Blog bot DAX Blogs 0 28.10.2006 17:43

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

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

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