18.06.2014, 18:24 | #1 |
Участник
|
Вызов из PowerShell Net Connector происходит только по одной конфигурации
Пытаюсь в одном сеансе PowerShell подключиться под разными конфигурациями, делаю нечто подобное (показано в упрощенном виде).
Код: [Reflection.Assembly]::LoadWithPartialName('Microsoft.Dynamics.BusinessConnectorNet') $axcFile1 = 'c\test\config1.axc' $axcFile2 = 'c\test\config2.axc' $ax = New-Object Microsoft.Dynamics.BusinessConnectorNet.Axapta $ax.Logon('', '', '', $axcFile1) $ax.Logoff() $ax.Logon('', '', '', $axcFile2) $ax.Logoff() если опять сделать Код: $ax.Logon('', '', '', $axcFile1) Переменную $ax между вызовами и просто приравнивал к $null и чистил при помощи Remove-Variable aх ничего не помогает. Попробовал сделать похожие вызовы в программе на C#, там вызовы в одной сессии по разным конфигурациям работают. Что нужно сделать в PowerShell чтобы он "забыл", что ранее уже был вызов с первой конфигурацией? |
|
19.06.2014, 08:56 | #2 |
Участник
|
А можно перед вторым подключением заново проинициализировать $ax?
Код: $ax = New-Object Microsoft.Dynamics.BusinessConnectorNet.Axapta |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (1). |
19.06.2014, 10:12 | #3 |
Участник
|
Да, конечно, пробовал и пересоздавать объект, тем более, что после обнуления переменной это приходилось делать в любом случае.
А вот с тестом на C# был не прав. В коде была ошибка и вызывалось подключение всегда с одной конфигурацией. Когда поправил появилась та же самая проблема. В общем, думаю что при первом подключении загружается сессия с типом сеанса "Рабочий". После этого из того же приложения подключения идут с типом сеанса "Business Connector Proxy" но только в том случае, если с того же приложения "Рабочий" та же конфигурация, что для новых подключений. А сессия "Рабочий" висит до выхода из создавшего её приложения. Можно ли как-нибудь завершить эту сессию "Рабочий"? |
|
19.06.2014, 17:36 | #4 |
Участник
|
Во времена COM Business Connector у него был метод Shutdown(), который как раз обрывал окончательно соединение с Аксаптой. У .NET BC такого метода нет, но можно попробовать принудительно выгружать сборку после использования, для чего создавать под нее отдельный AppDomain. Примеры можно найти, скажем, здесь: http://stackoverflow.com/questions/1...nal-assemblies
|
|
|
За это сообщение автора поблагодарили: Raven Melancholic (5). |
19.06.2014, 20:40 | #5 |
Читатель
|
Цитата:
Edit: Не помогает Dispose. Да и AppDomain вряд ли поможет. .NET Business Connector ведь просто обертка над неуправляемым ядром, вот, похоже, это ядро в памяти и остается, а при создании нового объекта Axapta Business Connector просто переподключается к нему. Последний раз редактировалось b_nosoff; 19.06.2014 в 22:31. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (2). |
20.06.2014, 13:25 | #6 |
Участник
|
Хотя чтобы не терять время уже реализовал все без коннектора, но тема с доменами заинтересовала.
Попробую в выходные на C# это замутить (так как пока глянул только одним глазом и не очень представляю как это в PowerShell сделать). Если сработает, буду думать про PowerShell. |
|
20.06.2014, 16:40 | #7 |
Участник
|
Без доменов получилось.
Просто из одного сеанса PowerShell вызываю сам PowerShell со скриптом, которому передаю параметры. Жутко выглядит, но работает. |
|
|
За это сообщение автора поблагодарили: Logger (3). |