27.08.2020, 12:18 | #1 |
Участник
|
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." бесит. кто и как боролся с этим? |
|
27.08.2020, 13:19 | #2 |
Участник
|
Видел такие мучения. Коллега в 2009-й делал по другому.
Просто генерил новую dll со сборкой. Имя было новое. Грузил ее в память и вызывал нужные методы через дотнетные аналоги SysDictClass. На первый взгляд неудобно, но нужно было 1-2 метода и его это устраивало. По совокупности гемора оказалось меньше. Не уверен что так и надо в вашем случае, но как крайний вариант... |
|
27.08.2020, 13:26 | #3 |
Участник
|
Еще на этапе разработки можно код сделать клиентским. Тогда возможно удастся обойтись только рестартом клиента без рестарта аоса.
|
|
27.08.2020, 13:56 | #4 |
Участник
|
добавить еще один референс с другим именем можно
но выполнить любой веб-сервис можно только на сервере. чтобы сервер узнал о новом референсе с таким же веб-сервисом, нужно перегрузить АОС. а это привлекает санитаров. Цитата:
но такой подход напрочь лишает всех преимуществ intelliSence, убирает статический контроль и отменяет контракты. ну, и всю религию веб-сервиса надо свести к 1-2 методам. а остальное в рантайме. при таком подходе скрипач (веб-сервис с WCF) не нужен. вполне можно юзать что-нибудь более традиционное. По совокупности гемора больше, поскольку все проверки на соблюдение контрактов уходят в рантайм. Нет, конечно можно "ничего не проверять"... Но может можно обновить Service Reference НЕ перегружая AOS? Последний раз редактировалось mazzy; 27.08.2020 в 14:06. |
|
27.08.2020, 15:34 | #5 |
Участник
|
Цитата:
usdl ссылка скармливалась .Net библиотеке, которая генерила dll - обертку. Далее все работа шла с этой dll. т.е. референса не было вообще. Конечно никакого Intellisence не было. Код мог работать как на клиенте так и на сервере. Авторизация тоже была возможна, а не как сейчас, только анонимные подключения. |
|
27.08.2020, 16:34 | #6 |
Участник
|
В ax2009 можно увидеть пример такой реализации в мексиканском семействе объектов EInvoiceCFDI*
Правда "мексы" не от хорошей жизни так сделали - им нужна была авторизация по сертификату Последний раз редактировалось mazzy; 27.08.2020 в 16:49. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
27.08.2020, 18:23 | #7 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: mazzy (2), EVGL (1), Logger (4). |
27.08.2020, 21:11 | #8 |
Участник
|
Цитата:
Цитата:
Цитата:
Сообщение от gl00mie
А запустить "свой собственный" AOS прям... хоть из ком.строки, на отдельном TCP-порту, проверять сервис, потом прибивать AOS по Ctrl-Break в консоли. Как минимум, другим пользователям это помешать не должно.
знатное курево но мысль с отдельным AOS - продуктивная. Действительно стоит попробовать поставить второй АОС в кластер и перегружать только его. И вообще каждому разработчику свой АОС в кластере! Эк меня заносит Спасибо за совет. Последний раз редактировалось mazzy; 27.08.2020 в 21:17. |
|
19.10.2020, 20:11 | #9 |
Участник
|
Сам не пробовал, но нашел интересную статейку по этому поводу.
Там кстати тоже ссылочка есть на hot swapping assembies without AOS restart, про которую gl00mie писал. https://daxmusings.codecrib.com/2011...eployment.html
__________________
// no comments |
|
|
|