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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2016, 10:26   #21  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от raz Посмотреть сообщение
Можно попробовать использовать несколько web services, каждый подключен к разным аксаптам. Тогда можно коннектиться из одной аксапты к нескольким разным.
Если web services будут на разных машинах, то 100% проблем не будет. Можно даже поднять на одной, в отдельных пулах. Сейчас тестирую такой вариант, вроде работает, но есть сомнения.

А если пакетными заданиями выполнять, это будет считаться за разных клиентов?
Старый 22.06.2016, 10:36   #22  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от raz Посмотреть сообщение
Можно даже поднять на одной, в отдельных пулах. Сейчас тестирую такой вариант, вроде работает, но есть сомнения.
Какие сомнения ? Нормально работает такой вариант. Разные пулы - это разные приложения, у каждого своя сессия business connector.
Цитата:
Сообщение от demianimp Посмотреть сообщение
А если пакетными заданиями выполнять, это будет считаться за разных клиентов?
Разные пакетные задания - это одно приложение.
__________________
Дмитрий
Старый 22.06.2016, 10:37   #23  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от demianimp Посмотреть сообщение
А если пакетными заданиями выполнять, это будет считаться за разных клиентов?
Если только поднимете несколько пакетных серверов и у каждого настроите свою пакетную группу. Тогда возможно.
Проблема в том, что если один процесс вызывает .net connector, то следующий его вызов будет по тому же подключению, т.к. .net connector не дисконнктится сразу, а держит подключение, что бы следующий вызов отработал быстрее.
ИМХО, что бы работало, нужно развести вызовы по адресным пространствам (процессам).
Старый 22.06.2016, 10:40   #24  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от Damn Посмотреть сообщение
Какие сомнения ? Нормально работает такой вариант. Разные пулы - это разные приложения, у каждого своя сессия business connector.
Ну я так и думал, но коллеги настаивали перепроверить.
За это сообщение автора поблагодарили: _scorp_ (2).
Старый 24.06.2016, 10:03   #25  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Друзья, а есть кусок кода из 1С как цепляться к AX?
Насколько я понял, она не поддерживает .net
Старый 24.06.2016, 11:03   #26  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
На инфостаре когда-то выкладывался проект доступа к 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  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
На инфостаре когда-то выкладывался проект доступа к net сборкам из 1C. Но там все сложно - универсальный COM объект при помощи рефлексии оборачивает все вызовы для net сборки. Пример использования: http://infostart.ru/public/238584/ и http://infostart.ru/public/448668/
Спасибо большое.
Старый 30.08.2022, 17:39   #28  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
То ли лыжи не едут то ли я не спортсмен.

Решил подобным образом связать две 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  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Есть вот такое обсуждение у буржуев
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  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
На всякий случай, обращаю внимание читателей что проблема здесь не в том чтобы поменять аос на который логинимся (т.е. не та проблема которую в начале темы обсуждали), а просто хоть куда нибудь хотим залогиниться и не можем.
Старый 30.08.2022, 18:04   #31  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Logger Посмотреть сообщение
На всякий случай, обращаю внимание читателей что проблема здесь не в том чтобы поменять аос на который логинимся (т.е. не та проблема которую в начале темы обсуждали), а просто хоть куда нибудь хотим залогиниться и не можем.
Такое ощущение что клиент ах2012 латентно использует BusinessConnector для подключения к своему серверу. Поэтому с помощью него же не может подключиться куда-либо ещё.
Если запускать код на стороне сервера - такая же ошибка ?
__________________
Дмитрий
За это сообщение автора поблагодарили: Logger (3).
Старый 30.08.2022, 18:29   #32  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да
Старый 30.08.2022, 18:30   #33  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А можешь попробовать этот джоб прогнать у себя?
Старый 30.08.2022, 19:20   #34  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Logger Посмотреть сообщение
А можешь попробовать этот джоб прогнать у себя?
У меня такая же ошибка.
__________________
Дмитрий
За это сообщение автора поблагодарили: Logger (3).
Старый 30.08.2022, 20:12   #35  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Damn Посмотреть сообщение
Такое ощущение что клиент ах2012 латентно использует BusinessConnector для подключения к своему серверу. Поэтому с помощью него же не может подключиться куда-либо ещё.
Интересное предположение.
Очень похоже на правду.
Правда прикол в том что изначально я пытался подключиться через бизнес коннектор к тому же самому аосу.

Похоже там просто баг какой-то. Т.е. он видит что уже залогинен в какую то аксапту и думает что некая рекурсия по логинам идет и посылает.
Старый 30.08.2022, 21:02   #36  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
297 / 866 (29) +++++++
Регистрация: 23.10.2012
Привет.
Наводка, причина ошибки - значение переменной: Microsoft.Dynamics.AX.ManagedInterop.RuntimeContext::isSingleSession()

Последний раз редактировалось Товарищ ♂uatr; 30.08.2022 в 21:07.
Старый 30.08.2022, 23:08   #37  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
297 / 866 (29) +++++++
Регистрация: 23.10.2012
"Поковырялся".
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  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
"Поковырялся"
Интересно, какой инструмент позволяет так поковыряться
__________________
Дмитрий
Старый 31.08.2022, 11:20   #39  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,938 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо за отклики.
Значит все же лыжи не едут.
Это хорошо.

Найдем обходной путь.
Старый 31.08.2022, 11:32   #40  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Решил подобным образом связать две ax2012R3
Не работает.
А стоит ли две 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 вызвать.
Цитата:
Сообщение от Logger Посмотреть сообщение
Причем если использовать бизнесконнектор из консольного приложения или из вебсервиса написанного на .net то все работает. А из под аксапты не хочет ни в какую.
Может, это потому, что у консольного приложения еще нет соединений ни с одним AOS-ом? Сможет ли консольное приложение через .NET BC подключиться последовательно к двум разным AOS-ам?..

Мне лично думается, что для онлайн-интеграции двух разных инсталляций AX2012 лучше использовать AIF-сервисы, работающие через WCF. Там не нужно ставить локально никакие .NET BC, там поддерживается масштабируемость и отказоустойчивость, потому что каждый вызов AIF-сервиса может реально попадать на разные AOS-ы (если использовать соотв. балансировку нагрузки), там за счет контрактов сервисов более явно определяются действия, доступные для выполнения извне, а не устраивается BC-анархия "подключился - и выполняй какой хочешь код", из-за которой появились все эти серверные методы, запросы разрешений на сервере и прочая...

Здесь мы, конечно, не рассматриваем интеграции, допускающие асинхронную обработку сообщений, - для них вообще не обязательно использовать подключения к другой инсталляции AX2012, вместо этого можно через очереди сообщений связываться и прочие подобные механизмы.
Теги
ax2009, ax2012, business connector

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
fed: Net requirements update in MRP Module and Working Set of MRP Blog bot DAX Blogs 14 08.05.2012 13:09
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
Inside Dynamics AX 4.0: Inside the Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
ALEG: Проект "Фишка недели" и первый пост - Microsoft Dynamics™ AX .NET Business Connector Blog bot DAX Blogs 1 22.11.2006 09:43

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

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

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