AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
NAV
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 27.08.2020, 12:18   #1  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 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.
Alt 27.08.2020, 13:19   #2  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Видел такие мучения. Коллега в 2009-й делал по другому.
Просто генерил новую dll со сборкой. Имя было новое. Грузил ее в память и вызывал нужные методы через дотнетные аналоги SysDictClass. На первый взгляд неудобно, но нужно было 1-2 метода и его это устраивало. По совокупности гемора оказалось меньше.

Не уверен что так и надо в вашем случае, но как крайний вариант...
Alt 27.08.2020, 13:26   #3  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Еще на этапе разработки можно код сделать клиентским. Тогда возможно удастся обойтись только рестартом клиента без рестарта аоса.
Alt 27.08.2020, 13:56   #4  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Logger Beitrag anzeigen
Просто генерил новую dll со сборкой. Имя было новое.
добавить еще один референс с другим именем можно
но выполнить любой веб-сервис можно только на сервере.
чтобы сервер узнал о новом референсе с таким же веб-сервисом, нужно перегрузить АОС.
а это привлекает санитаров.


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

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

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

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

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

Geändert von mazzy (27.08.2020 um 14:06 Uhr)
Alt 27.08.2020, 15:34   #5  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.984 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von mazzy Beitrag anzeigen
добавить еще один референс с другим именем можно
но выполнить любой веб-сервис можно только на сервере.
чтобы сервер узнал о новом референсе с таким же веб-сервисом, нужно перегрузить АОС.
а это привлекает санитаров.
Там все было более радикально.
usdl ссылка скармливалась .Net библиотеке, которая генерила dll - обертку.
Далее все работа шла с этой dll. т.е. референса не было вообще. Конечно никакого Intellisence не было. Код мог работать как на клиенте так и на сервере. Авторизация тоже была возможна, а не как сейчас, только анонимные подключения.
Alt 27.08.2020, 16:34   #6  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Logger Beitrag anzeigen
Там все было более радикально.
В ax2009 можно увидеть пример такой реализации в мексиканском семействе объектов EInvoiceCFDI*
Правда "мексы" не от хорошей жизни так сделали - им нужна была авторизация по сертификату
__________________
полезное на axForum, github, vk, coub.

Geändert von mazzy (27.08.2020 um 16:49 Uhr)
This post has been rated by: Logger (3).
Alt 27.08.2020, 18:23   #7  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von mazzy Beitrag anzeigen
как только выполнили веб-сервис на AOS - нужно перегружать AOS, если хочется обновить веб-сервис на ax2009
Zitat:
Zitat von mazzy Beitrag anzeigen
Но может можно обновить 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 в консоли. Как минимум, другим пользователям это помешать не должно.
This post has been rated by: mazzy (2), EVGL (1), Logger (4).
Alt 27.08.2020, 21:11   #8  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von gl00mie Beitrag anzeigen
В данном случае "обновить Service Reference" - это выгрузить одну .NET-сборку и загрузить другую с тем же именем, но другим кодом внутри, правильно?
не только. нужен intelliSence и прочие радости разработки с WCF и групповой разработки в частности.

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

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

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

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

Geändert von mazzy (27.08.2020 um 21:17 Uhr)
Alt 19.10.2020, 20:11   #9  
dech ist offline
dech
Участник
Benutzerbild von dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Registriert seit: 25.06.2009
Ort: Омск
Blog-Einträge: 3
Сам не пробовал, но нашел интересную статейку по этому поводу.
Там кстати тоже ссылочка есть на hot swapping assembies without AOS restart, про которую gl00mie писал.
https://daxmusings.codecrib.com/2011...eployment.html
__________________
// no comments
Alt 19.10.2020, 20:30   #10  
lvan ist offline
lvan
Участник
Benutzerbild von lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Registriert seit: 15.04.2011
Blog-Einträge: 1
https://docs.microsoft.com/en-us/dyn...ectedfrom=MSDN
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 17:08 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.