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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2015, 23:18   #1  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Добавление DLL в reference
Добрый вечер. Подскажите плиз, что делаю не так.
Есть некая библиотека, положил её на сервере в папку C:\Program Files\Microsoft Dynamics AX\50\Client\Bin.
Добавил DLL в GAC "gacutil /i Report.dll"
DLL добавил в reference Dynamics AX.
Сделал рестарт AOS

Пытаюсь работать с библиотекой на стороне клиента, ругается на первую же строчку, как "Таблица не содержит это поле."
Report.Report fr;
InteropPermission dllPermission = new InteropPermission(InteropKind::ClrInterop);
;
fr = new Report.Report();
fr.Design();
Если делаю все тоже самое на стороне клиента, все работает.
AX 2009ru5
Старый 19.12.2015, 07:33   #2  
DmitryS2 is offline
DmitryS2
Участник
 
7 / 11 (1) +
Регистрация: 02.07.2015
Report.Report fr;
InteropPermission dllPermission = new InteropPermission(InteropKind::ClrInterop);
;
dllPermission.assert();

fr = new Report.Report();
fr.Design();

CodeAccessPermission::revertAssert();
Старый 19.12.2015, 08:35   #3  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Я не всё понял из вашего потока сознания, но применив свои способности телепатии 80 уровня, пришел к выводу, что вы положили файл на одну машину, а пытаетесь работать с ним на другой.
Неудивительно, что это не работает.
Старый 19.12.2015, 09:25   #4  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от lvan Посмотреть сообщение
Я не всё понял из вашего потока сознания, но применив свои способности телепатии 80 уровня, пришел к выводу, что вы положили файл на одну машину, а пытаетесь работать с ним на другой.
Неудивительно, что это не работает.
Обьясните пожалуйста. Да, цель работать со сборкой, зарегистрированной на сервере на клиентских машинах. И что ж вас так ввело в стопор, не пятница ли случайно?
Старый 19.12.2015, 16:27   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Ilyaae Посмотреть сообщение
не пятница ли случайно?
Открою большой секрет - сегодня не пятница, а суббота.
Вы же сами написали:
Цитата:
положил её на сервере
Цитата:
Пытаюсь работать с библиотекой на стороне клиента
Клиент не имеет понятия что там на стороне сервера. Если библиотека вызывается на стороне клиента, то и доступна она должна быть на стороне клиента.
Вариант - если можно, что код нужно писать для работы на стороне сервера (хотя это и не всегда возможно - пример сканер, включающийся в разрыв клавиатуры)
Старый 19.12.2015, 17:24   #6  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Открою большой секрет - сегодня не пятница, а суббота.
Вы же сами написали:



Клиент не имеет понятия что там на стороне сервера. Если библиотека вызывается на стороне клиента, то и доступна она должна быть на стороне клиента.
Вариант - если можно, что код нужно писать для работы на стороне сервера (хотя это и не всегда возможно - пример сканер, включающийся в разрыв клавиатуры)
У некоторых ступор после пятницы бывает, писал как о возможной причине.
Согласен, клиент не знает. Но смысл добавлять библиотеки в reference, если с ними нельзя работать, не размещая библиотеки на стороне клиента? Код размещен в классе, у которого стоит вызов с сервера
Старый 20.12.2015, 18:08   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
А почему вы её на сервере положили в клиентскую папку?
(C:\Program Files\Microsoft Dynamics AX\50\Client\Bin)
Просто интересно.

Я когда клал для 2009ки в Server-ную папку, то работало даже без GAC-а для серверного кода.

Для клиентского кода как уже было отмечено - длл-ка должна быть на соответствующем клиенте.
__________________
Zhirenkov Vitaly
Старый 20.12.2015, 19:46   #9  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от ZVV Посмотреть сообщение
А почему вы её на сервере положили в клиентскую папку?
(C:\Program Files\Microsoft Dynamics AX\50\Client\Bin)
Просто интересно.

Я когда клал для 2009ки в Server-ную папку, то работало даже без GAC-а для серверного кода.

Для клиентского кода как уже было отмечено - длл-ка должна быть на соответствующем клиенте.
Ну мне так же было интересно, вот и пытался достигнуть результата экспериментальным путем. Результат пока 0-ой. Если положить библиотеку в папку серверную, то код выполняется на сервере, а с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост). Ну собственно где то так. Вот и вопрос, а можно ли работать со сборкой, на клиентской машине, если библиотека подключена на сервере?
Старый 20.12.2015, 23:05   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Мне кажется, стоит внести некоторую ясность в используемую терминологию. Добавление .NET-сборки в References - это указание клиенту и серверу, что используемые в коде X++ .NET-типы надо искать в том числе в сборке с таким именем ("строгим" именем, если сборка имеет цифровую подпись), при этом никакого "подключения" физически не происходит: в АОТ всего лишь добавляется немного метаданных сборки для её последующего поиска. Далее, обращение к сборке может идти, во-первых, во время компиляции кода, во-вторых, во время выполнения кода, причём очевидно, что второго без первого быть не может. Наконец, надо учесть, что в 2009-й компиляция выполняется на клиенте.
Таким образом, чтобы работать со сборкой на сервере, она должна быть доступна на всех хостах АОСов, где предполагается выполнять код, использующий типы из сборки. Но сначала сборка должна быть доступна на клиенте, где будет скомпилирован этот код. Как вариант, компиляцию можно запустить не "у себя", а на хосте АОСа, где лежит сборка, при этом она должна быть либо в GAC, либо и в bin АОСа (для загрузки во время выполнения), и в bin клиента (для загрузки во время компиляции). И все получится
За это сообщение автора поблагодарили: alex55 (1), Ilyaae (1).
Старый 21.12.2015, 11:52   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Ilyaae Посмотреть сообщение
Ну мне так же было интересно, вот и пытался достигнуть результата экспериментальным путем. Результат пока 0-ой. Если положить библиотеку в папку серверную, то код выполняется на сервере, а с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост). Ну собственно где то так. Вот и вопрос, а можно ли работать со сборкой, на клиентской машине, если библиотека подключена на сервере?
Вообще-то это была ирония...
Довольно вроде очевидно, что если вы хотите подложить длл серверу, то надо класть его в Сервер\Бин, а если клиенту - то в клиентскую папку на клиентском компьютере.
А в вашем описанном примере вы (вероятно) сделали ни то ни сё...

Сам когда-то ковырялся с этой темой тоже эксперементальным путём..
Согласен с gl00mie - всё работает именно так.

Единственный момент, который возможно будет интересен - в случае серверной dll в серверном коде на AX 2009 не будут работать byref переменные.
Они компиляться и вроде как работают но по факту всегда возвращают Нуль.
Если перенести на клиент - всё нормально работает.
В 2012 это исправили.
__________________
Zhirenkov Vitaly
Старый 21.12.2015, 13:59   #12  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от ZVV Посмотреть сообщение
Вообще-то это была ирония...
Довольно вроде очевидно, что если вы хотите подложить длл серверу, то надо класть его в Сервер\Бин, а если клиенту - то в клиентскую папку на клиентском компьютере.
А в вашем описанном примере вы (вероятно) сделали ни то ни сё...

Сам когда-то ковырялся с этой темой тоже эксперементальным путём..
Согласен с gl00mie - всё работает именно так.

Единственный момент, который возможно будет интересен - в случае серверной dll в серверном коде на AX 2009 не будут работать byref переменные.
Они компиляться и вроде как работают но по факту всегда возвращают Нуль.
Если перенести на клиент - всё нормально работает.
В 2012 это исправили.
Ну если посмотрите первый пост, то библиотека как раз и была размещена
C:\Program Files\Microsoft Dynamics AX\50\Client\Bin
Сейчас перенес в серверную папку, класс компилится на сервере. Копаю дальше.
Старый 21.12.2015, 14:23   #13  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Ilyaae Посмотреть сообщение
Ну если посмотрите первый пост, то библиотека как раз и была размещена
C:\Program Files\Microsoft Dynamics AX\50\Client\Bin
Сейчас перенес в серверную папку, класс компилится на сервере. Копаю дальше.
Я внимательно посмотрел ещё раз и вижу по прежнему, что вы "положил её на сервере в папку C:\Program Files\Microsoft Dynamics AX\50\Client\Bin."
именно об этом я писал выше... На сервере она должна быть в серверной папке, а на клиенте - в клиентской.
Если запускаете клиента непосредственно с сервера - тогда в обоих.
__________________
Zhirenkov Vitaly
Старый 21.12.2015, 16:00   #14  
ex3em is offline
ex3em
Участник
 
38 / 19 (1) ++
Регистрация: 22.07.2008
Если вы хотите использовать DLL на машине клиента, то DLL должна быть на машине клиента. Так уж устроено. На машину(сервер) эту DLL можно не ложить, на машину(клиента, на которой будет лежать DLL) этот факт ни как не повлияет, код клиента будет работать с DLL без проблем.
Старый 21.12.2015, 16:49   #15  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от ex3em Посмотреть сообщение
Если вы хотите использовать DLL на машине клиента, то DLL должна быть на машине клиента. Так уж устроено. На машину(сервер) эту DLL можно не ложить, на машину(клиента, на которой будет лежать DLL) этот факт ни как не повлияет, код клиента будет работать с DLL без проблем.
Ну, мне надо, чтоб DLL была на сервере и клиенты могли с ней работать. Смысл мне например на 50 ящиков ходить устанавливать её. А если винду переустанови, опять устанавливай, регистрируй.
Старый 21.12.2015, 19:31   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Ilyaae Посмотреть сообщение
Ну, мне надо, чтоб DLL была на сервере и клиенты могли с ней работать. Смысл мне например на 50 ящиков ходить устанавливать её. А если винду переустанови, опять устанавливай, регистрируй.
Мне кажется вы не до конца всё правильно понимаете/изъясняетесь.

"надо чтобы клиенты могли работать с DLL" и
"надо чтобы клиенты могли запускать код работающий с DLL на сервере"

- это разные вещи. Разница в окружении с которым будет работать DLL. Если реально из DLL не происходит взаимодействия с клиентским окружением то вас должен устроить второй вариант.

Цитата:
Сообщение от Ilyaae Посмотреть сообщение
с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост).
Вот в эту сторону смотрите. Вам уже намекали что в серверном режиме не работает потому что папка не та.

Ещё раз. Выполнить клиентский код физически запускаясь на сервере не тоже самое что выполнить серверный код запускаясь с клиентской машины. Не знаю как ещё понятнее объяснить.
За это сообщение автора поблагодарили: Ilyaae (1).
Старый 21.12.2015, 21:49   #17  
Ilyaae is offline
Ilyaae
Участник
 
46 / 11 (1) +
Регистрация: 23.09.2008
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Мне кажется вы не до конца всё правильно понимаете/изъясняетесь.

"надо чтобы клиенты могли работать с DLL" и
"надо чтобы клиенты могли запускать код работающий с DLL на сервере"

- это разные вещи. Разница в окружении с которым будет работать DLL. Если реально из DLL не происходит взаимодействия с клиентским окружением то вас должен устроить второй вариант.


Вот в эту сторону смотрите. Вам уже намекали что в серверном режиме не работает потому что папка не та.

Ещё раз. Выполнить клиентский код физически запускаясь на сервере не тоже самое что выполнить серверный код запускаясь с клиентской машины. Не знаю как ещё понятнее объяснить.
Все понятно и доступно мне уже изложено. Из за нехватки знаний и возник весь сумбур. Спасибо за терпение в высказываниях. Серверный вариант работает, в этом направлении и разбираюсь(ну извините, как могу). Как понимаю, код который будет вызван на сервере, должен вернуть результат клиенту?
Старый 23.12.2015, 19:27   #18  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Цитата:
Сообщение от ex3em Посмотреть сообщение
На машину(сервер) эту DLL можно не ложить
лажать!
Старый 24.12.2015, 11:08   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ilyaae Посмотреть сообщение
Но смысл добавлять библиотеки в reference, если с ними нельзя работать, не размещая библиотеки на стороне клиента? Код размещен в классе, у которого стоит вызов с сервера
семейство классов SysFileDeployment позволяет доставить файлы и DLL на клиента.
вызывается при запуске аксапты
За это сообщение автора поблагодарили: ZVV (2), sukhanchik (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axilicious:AX2012 DLL Deployment and how AX binds DLL’s at runtime Blog bot DAX Blogs 0 22.05.2013 20:13
Ax3 and Win2008 для печати Arahnid DAX: Администрирование 13 22.04.2013 17:07
MSDAX 4.0 и планировщик win server 2008 werov2010 DAX: Администрирование 11 16.08.2012 14:18
Загруженая dll на C# не выгружается DmitryK DAX: Программирование 5 09.04.2012 11:15
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29

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

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

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