22.06.2016, 10:26 | #21 |
Участник
|
Цитата:
Сообщение от raz
Можно попробовать использовать несколько web services, каждый подключен к разным аксаптам. Тогда можно коннектиться из одной аксапты к нескольким разным.
Если web services будут на разных машинах, то 100% проблем не будет. Можно даже поднять на одной, в отдельных пулах. Сейчас тестирую такой вариант, вроде работает, но есть сомнения. А если пакетными заданиями выполнять, это будет считаться за разных клиентов? |
|
22.06.2016, 10:36 | #22 |
Участник
|
Цитата:
Разные пакетные задания - это одно приложение.
__________________
Дмитрий |
|
22.06.2016, 10:37 | #23 |
NavAx
|
Цитата:
Проблема в том, что если один процесс вызывает .net connector, то следующий его вызов будет по тому же подключению, т.к. .net connector не дисконнктится сразу, а держит подключение, что бы следующий вызов отработал быстрее. ИМХО, что бы работало, нужно развести вызовы по адресным пространствам (процессам). |
|
22.06.2016, 10:40 | #24 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: _scorp_ (2). |
24.06.2016, 10:03 | #25 |
Участник
|
Друзья, а есть кусок кода из 1С как цепляться к AX?
Насколько я понял, она не поддерживает .net |
|
24.06.2016, 11:03 | #26 |
Участник
|
На инфостаре когда-то выкладывался проект доступа к net сборкам из 1C. Но там все сложно - универсальный COM объект при помощи рефлексии оборачивает все вызовы для net сборки. Пример использования: http://infostart.ru/public/238584/ и http://infostart.ru/public/448668/
|
|
|
За это сообщение автора поблагодарили: Logger (3), Ace of Database (2). |
24.06.2016, 13:31 | #27 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
На инфостаре когда-то выкладывался проект доступа к net сборкам из 1C. Но там все сложно - универсальный COM объект при помощи рефлексии оборачивает все вызовы для net сборки. Пример использования: http://infostart.ru/public/238584/ и http://infostart.ru/public/448668/
|
|
30.08.2022, 17:39 | #28 |
Участник
|
То ли лыжи не едут то ли я не спортсмен.
Решил подобным образом связать две ax2012R3 Не работает. Выдает ошибку при logon / logonAs В 2009-й работает на ура. И на клиенте и на сервере. А в 2012-й не хочет. Это я что-то не так делаю или что-то в 12-ке поменяли? Причем если использовать бизнесконнектор из консольного приложения или из вебсервиса написанного на .net то все работает. А из под аксапты не хочет ни в какую. Пример джоба работающего на 2009 но не работающего в 12-ке (логины и пароли конечно надо свои подставить.) X++: static void Job1465_2_out(Args _args) { Microsoft.Dynamics.BusinessConnectorNet.Axapta axapta; str serverStr; System.Net.NetworkCredential credential; str clientLogin; str clientPassword; str clientNetworkDomain; ; new InteropPermission(InteropKind::ClrInterop).assert(); try { axapta = new Microsoft.Dynamics.BusinessConnectorNet.Axapta(); if (axapta) { serverStr = "SERVERNAME:2712"; // test // clientLogin = "ProxyUser"; // empty for use Logon else LogonAs clientPassword = "xxx"; clientNetworkDomain = "yourDomen"; if (clientLogin) { credential = new System.Net.NetworkCredential( clientLogin, clientPassword, clientNetworkDomain ); axapta.LogonAs( // тут выскакивает исключение в 12-ке clientLogin, // username clientNetworkDomain, // domain credential, // proxyUserNetworkCredential '', // company '', // language serverStr, // objectServer ''); // configuration } else { axapta.Logon('', '', serverStr, ''); // тут выскакивает исключение в 12-ке } axapta.Logoff(); } } catch (Exception::CLRError) { error(AifUtil::getClrErrorMessage()); } catch (Exception::Internal) { error(AifUtil::getClrErrorMessage()); } exceptionTextFallThrough(); } Последний раз редактировалось Logger; 30.08.2022 в 17:53. |
|
30.08.2022, 17:41 | #29 |
Участник
|
Есть вот такое обсуждение у буржуев
https://community.dynamics.com/ax/f/...ception/460390 В моем случае исключение такое X++: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Dynamics.AX.ManagedInterop.InvalidLogonInSingleSessionException at Microsoft.Dynamics.BusinessConnectorNet.Axapta.Logon(String company, String language, String objectServer, String configuration) --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.Dynamics.AX.ManagedInterop.ClrBridgeImpl.InvokeClrInstanceMethod(ClrBridgeImpl , ObjectWrapper objectWrapper, Char pszMethodName, Int32 argsLength, ObjectWrapper* arguments, Boolean argsAreByRef, Boolean isException) |
|
30.08.2022, 17:46 | #30 |
Участник
|
На всякий случай, обращаю внимание читателей что проблема здесь не в том чтобы поменять аос на который логинимся (т.е. не та проблема которую в начале темы обсуждали), а просто хоть куда нибудь хотим залогиниться и не можем.
|
|
30.08.2022, 18:04 | #31 |
Участник
|
Цитата:
Если запускать код на стороне сервера - такая же ошибка ?
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: Logger (3). |
30.08.2022, 18:29 | #32 |
Участник
|
Да
|
|
30.08.2022, 18:30 | #33 |
Участник
|
А можешь попробовать этот джоб прогнать у себя?
|
|
30.08.2022, 19:20 | #34 |
Участник
|
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: Logger (3). |
30.08.2022, 20:12 | #35 |
Участник
|
Цитата:
Очень похоже на правду. Правда прикол в том что изначально я пытался подключиться через бизнес коннектор к тому же самому аосу. Похоже там просто баг какой-то. Т.е. он видит что уже залогинен в какую то аксапту и думает что некая рекурсия по логинам идет и посылает. |
|
30.08.2022, 21:02 | #36 |
Участник
|
Привет.
Наводка, причина ошибки - значение переменной: Microsoft.Dynamics.AX.ManagedInterop.RuntimeContext::isSingleSession() Последний раз редактировалось Товарищ ♂uatr; 30.08.2022 в 21:07. |
|
30.08.2022, 23:08 | #37 |
Участник
|
"Поковырялся".
BC - верхнеуровневая обертка над Microsoft.Dynamics.AX.ManagedInterop. Внутри последнего есть проверка на результат выполнения функции isSingleSession и в случае с клиентом - логично, что значение должно быть true. А вот в случае с CIL - в BC через него зайти можно, но он сам сидит в Аксапте аналогичным способом. Учитывая, что библиотеки уже подгружены в домен приложения - упираемся в "LogonSystemChangedException". Но и её обойти тоже можно передав значения по умолчанию в Logon. Вот только получаем дополнительную сессию на этом же АОСе, но от имени системного пользователя (там с правами доступа еще нужно будет манипуляции осуществлять), оно вообще надо? На самом деле вопрос сводится к передаче нужных параметров в функцию: new Microsoft.Dynamics.AX.ManagedInterop.ClrBridgeCore().SetRuntimeContext, но это игра с огнем. Последний раз редактировалось Товарищ ♂uatr; 30.08.2022 в 23:26. |
|
|
За это сообщение автора поблагодарили: Logger (30). |
30.08.2022, 23:23 | #38 |
Участник
|
Интересно, какой инструмент позволяет так поковыряться
__________________
Дмитрий |
|
31.08.2022, 11:20 | #39 |
Участник
|
Спасибо за отклики.
Значит все же лыжи не едут. Это хорошо. Найдем обходной путь. |
|
31.08.2022, 11:32 | #40 |
Участник
|
А стоит ли две ax2012R3 связывать через BC?..
Помнится, у BC есть одна нехорошая особенность, из-за чего его нежелательно использовать в интеграциях двух систем, где нужна отказоустойчивость и масштабируемость: после первого входа он привязывается к определенному AOS-у и потом ни в какую на другие AOS-ы заходить не хочет. Из-за этой особенности летит вся (ожидаемая) отказоустойчивость, когда, скажем, некий Retail Transaction Server (RTS) подключается через BC.NET к AOS-ам для выполнения online-запросов с розничных касс (AX POS). Вот если с тем AOS-ом, куда подключился в первый раз экземпляр RTS, что-то случится, то к другому AOS-у он без собственного перезапуска не подключится и нагрузку между разными AOS-ами распределять не будет. С COM BC в AX2009, помнится, была такая же проблема, и связано это, судя по всему, с тем, что обычный сценарий использования BC "вход/короткий запрос/выход" плохо сочетается с тем обстоятельством, что новая всамделешная сессия на AOS-е создается довольно долго. Из-за этого BC кэширует свое соединение с AOS-ом и не разрывает его по Logoff - только если какой-нить Shutdown вызвать. Цитата:
Мне лично думается, что для онлайн-интеграции двух разных инсталляций AX2012 лучше использовать AIF-сервисы, работающие через WCF. Там не нужно ставить локально никакие .NET BC, там поддерживается масштабируемость и отказоустойчивость, потому что каждый вызов AIF-сервиса может реально попадать на разные AOS-ы (если использовать соотв. балансировку нагрузки), там за счет контрактов сервисов более явно определяются действия, доступные для выполнения извне, а не устраивается BC-анархия "подключился - и выполняй какой хочешь код", из-за которой появились все эти серверные методы, запросы разрешений на сервере и прочая... Здесь мы, конечно, не рассматриваем интеграции, допускающие асинхронную обработку сообщений, - для них вообще не обязательно использовать подключения к другой инсталляции AX2012, вместо этого можно через очереди сообщений связываться и прочие подобные механизмы. |
|
Теги |
ax2009, ax2012, business connector |
|
|