AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 18.12.2015, 23:18   #1  
Ilyaae ist offline
Ilyaae
Участник
 
46 / 11 (1) +
Registriert seit: 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
Alt 19.12.2015, 07:33   #2  
DmitryS2 ist offline
DmitryS2
Участник
 
7 / 11 (1) +
Registriert seit: 02.07.2015
Report.Report fr;
InteropPermission dllPermission = new InteropPermission(InteropKind::ClrInterop);
;
dllPermission.assert();

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

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



Клиент не имеет понятия что там на стороне сервера. Если библиотека вызывается на стороне клиента, то и доступна она должна быть на стороне клиента.
Вариант - если можно, что код нужно писать для работы на стороне сервера (хотя это и не всегда возможно - пример сканер, включающийся в разрыв клавиатуры)
У некоторых ступор после пятницы бывает, писал как о возможной причине.
Согласен, клиент не знает. Но смысл добавлять библиотеки в reference, если с ними нельзя работать, не размещая библиотеки на стороне клиента? Код размещен в классе, у которого стоит вызов с сервера
Alt 20.12.2015, 02:07   #7  
lvan ist offline
lvan
Участник
Benutzerbild von lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Registriert seit: 15.04.2011
Blog-Einträge: 1
RTFM https://msdn.microsoft.com/en-us/library/hh538486.aspx
Alt 20.12.2015, 18:08   #8  
ZVV ist offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1.006 / 246 (11) ++++++
Registriert seit: 13.02.2004
Ort: Минск
->
А почему вы её на сервере положили в клиентскую папку?
(C:\Program Files\Microsoft Dynamics AX\50\Client\Bin)
Просто интересно.

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

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

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

Для клиентского кода как уже было отмечено - длл-ка должна быть на соответствующем клиенте.
Ну мне так же было интересно, вот и пытался достигнуть результата экспериментальным путем. Результат пока 0-ой. Если положить библиотеку в папку серверную, то код выполняется на сервере, а с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост). Ну собственно где то так. Вот и вопрос, а можно ли работать со сборкой, на клиентской машине, если библиотека подключена на сервере?
Alt 20.12.2015, 23:05   #10  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Мне кажется, стоит внести некоторую ясность в используемую терминологию. Добавление .NET-сборки в References - это указание клиенту и серверу, что используемые в коде X++ .NET-типы надо искать в том числе в сборке с таким именем ("строгим" именем, если сборка имеет цифровую подпись), при этом никакого "подключения" физически не происходит: в АОТ всего лишь добавляется немного метаданных сборки для её последующего поиска. Далее, обращение к сборке может идти, во-первых, во время компиляции кода, во-вторых, во время выполнения кода, причём очевидно, что второго без первого быть не может. Наконец, надо учесть, что в 2009-й компиляция выполняется на клиенте.
Таким образом, чтобы работать со сборкой на сервере, она должна быть доступна на всех хостах АОСов, где предполагается выполнять код, использующий типы из сборки. Но сначала сборка должна быть доступна на клиенте, где будет скомпилирован этот код. Как вариант, компиляцию можно запустить не "у себя", а на хосте АОСа, где лежит сборка, при этом она должна быть либо в GAC, либо и в bin АОСа (для загрузки во время выполнения), и в bin клиента (для загрузки во время компиляции). И все получится
This post has been rated by: alex55 (1), Ilyaae (1).
Alt 21.12.2015, 11:52   #11  
ZVV ist offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1.006 / 246 (11) ++++++
Registriert seit: 13.02.2004
Ort: Минск
->
Zitat:
Zitat von Ilyaae Beitrag anzeigen
Ну мне так же было интересно, вот и пытался достигнуть результата экспериментальным путем. Результат пока 0-ой. Если положить библиотеку в папку серверную, то код выполняется на сервере, а с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост). Ну собственно где то так. Вот и вопрос, а можно ли работать со сборкой, на клиентской машине, если библиотека подключена на сервере?
Вообще-то это была ирония...
Довольно вроде очевидно, что если вы хотите подложить длл серверу, то надо класть его в Сервер\Бин, а если клиенту - то в клиентскую папку на клиентском компьютере.
А в вашем описанном примере вы (вероятно) сделали ни то ни сё...

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

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

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

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

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

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

Zitat:
Zitat von Ilyaae Beitrag anzeigen
с клиентской машины, даже если стоит вызов класса с сервера, выдает ошибку(см. 1-й пост).
Вот в эту сторону смотрите. Вам уже намекали что в серверном режиме не работает потому что папка не та.

Ещё раз. Выполнить клиентский код физически запускаясь на сервере не тоже самое что выполнить серверный код запускаясь с клиентской машины. Не знаю как ещё понятнее объяснить.
This post has been rated by: Ilyaae (1).
Alt 21.12.2015, 21:49   #17  
Ilyaae ist offline
Ilyaae
Участник
 
46 / 11 (1) +
Registriert seit: 23.09.2008
Zitat:
Zitat von S.Kuskov Beitrag anzeigen
Мне кажется вы не до конца всё правильно понимаете/изъясняетесь.

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

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


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

Ещё раз. Выполнить клиентский код физически запускаясь на сервере не тоже самое что выполнить серверный код запускаясь с клиентской машины. Не знаю как ещё понятнее объяснить.
Все понятно и доступно мне уже изложено. Из за нехватки знаний и возник весь сумбур. Спасибо за терпение в высказываниях. Серверный вариант работает, в этом направлении и разбираюсь(ну извините, как могу). Как понимаю, код который будет вызван на сервере, должен вернуть результат клиенту?
Alt 23.12.2015, 19:27   #18  
lvan ist offline
lvan
Участник
Benutzerbild von lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Registriert seit: 15.04.2011
Blog-Einträge: 1
Zitat:
Zitat von ex3em Beitrag anzeigen
На машину(сервер) эту DLL можно не ложить
лажать!
Alt 24.12.2015, 11:08   #19  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Ilyaae Beitrag anzeigen
Но смысл добавлять библиотеки в reference, если с ними нельзя работать, не размещая библиотеки на стороне клиента? Код размещен в классе, у которого стоит вызов с сервера
семейство классов SysFileDeployment позволяет доставить файлы и DLL на клиента.
вызывается при запуске аксапты
This post has been rated by: ZVV (2), sukhanchik (2).
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 12:19 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.