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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.01.2014, 18:26   #1  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Передача CLRObject с сервера на клиент
Возникла проблема с передачей CLRObject из серверного метода на клиент.
Вернее объект передается, но видимо не правильно так как при передаче его в метод падает клиент. Если CLRobject создать на клиенте то все работает без проблем. Есть идеи что не так?
Старый 15.01.2014, 19:00   #2  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Сам нашел, видимо этого сделать не получится
http://msdn.microsoft.com/en-us/libr...97(AX.50).aspx
Старый 15.01.2014, 19:05   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Попробуйте как-нибудь провести сериализацию-десериализацию или передавать не CLRObject, а его составляющие, с помощью которых можно воссоздать CLRObject на клиенте.
__________________
// no comments
Старый 15.01.2014, 19:32   #4  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от dech Посмотреть сообщение
Попробуйте как-нибудь провести сериализацию-десериализацию или передавать не CLRObject, а его составляющие, с помощью которых можно воссоздать CLRObject на клиенте.
Боюсь что в объекте этого класса нечего взять для повторного создания на клиенте
Код:
System.Net.ICredentials
Старый 15.01.2014, 23:29   #5  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Так и не нашел каким образом сделать сериализацию System.Net.ICredentials.
Старый 16.01.2014, 14:15   #6  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от maldini Посмотреть сообщение
Так и не нашел каким образом сделать сериализацию System.Net.ICredentials.
X++:
System.Net.ICredentials iCredentials = new System.Net.ICredentials();
str iCredentialsXml;
System.Type type;

iCredentialsXml = DOCommonDataManager::serialize(iCredentials);

type = System.Type::GetType('System.Net.ICredentials, System', true);

iCredentials = DOCommonDataManager::deserialize(type, iCredentialsXml);

Последний раз редактировалось Morpheus; 16.01.2014 в 14:19.
Старый 16.01.2014, 15:00   #7  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Morpheus Посмотреть сообщение
X++:
System.Net.ICredentials iCredentials = new System.Net.ICredentials();
str iCredentialsXml;
System.Type type;

iCredentialsXml = DOCommonDataManager::serialize(iCredentials);

type = System.Type::GetType('System.Net.ICredentials, System', true);

iCredentials = DOCommonDataManager::deserialize(type, iCredentialsXml);
У меня нет класса.
X++:
DOCommonDataManager
Видимо он из AX 2012, а мне необходимо реализовать это в DAX 4.0

Последний раз редактировалось maldini; 16.01.2014 в 15:03.
Старый 16.01.2014, 16:56   #8  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от maldini Посмотреть сообщение
У меня нет класса.
X++:
DOCommonDataManager
Видимо он из AX 2012, а мне необходимо реализовать это в DAX 4.0
Посмотрите/скопируйте реализацию этого класса в/из AX 2012
За это сообщение автора поблагодарили: maldini (1).
Старый 16.01.2014, 18:17   #9  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Morpheus Посмотреть сообщение
Посмотрите/скопируйте реализацию этого класса в/из AX 2012
Сериализация простого объекта получается
X++:
 type = System.Type::GetType('System.String');
 serializer = new System.Xml.Serialization.XmlSerializer(type);
А вот такой объект не работает

X++:
type = System.Type::GetType('System.Net.ICredentials');

serializer = new System.Xml.Serialization.XmlSerializer(type);
Данный объект не получится сеарилизовать, так как он хранит приватные поля, а приватные поля сеарилизации не подвергаются.

Всем спасибо. Затея была неудачной.


Скорее всего не все объекты возможно сериализовать.

Последний раз редактировалось maldini; 16.01.2014 в 18:48.
Старый 16.01.2014, 19:02   #10  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от maldini Посмотреть сообщение
Данный объект не получится сеарилизовать, так как он хранит приватные поля, а приватные поля сеарилизации не подвергаются.
У вас проблема с сериализацией или десериализацией? Если второе, то обратите внимание все ли типы сериализованных объектов предоставлены для десериализации.

X++:
System.Type[] extraTypes = new System.Type[1]();

extraTypes.SetValue(System.Type::GetType('ExtraType, ExtraTypeDLL', true), 0);

DOCommonDataManager::deserialize(type, _objectXml, extraTypes);
Старый 16.01.2014, 22:08   #11  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Morpheus Посмотреть сообщение
У вас проблема с сериализацией или десериализацией? Если второе, то обратите внимание все ли типы сериализованных объектов предоставлены для десериализации.

X++:
System.Type[] extraTypes = new System.Type[1]();

extraTypes.SetValue(System.Type::GetType('ExtraType, ExtraTypeDLL', true), 0);

DOCommonDataManager::deserialize(type, _objectXml, extraTypes);
Проблема в инициализации объекта XmlSerializer
Старый 17.01.2014, 02:49   #12  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Это интерфейс, а не класс.
System.Net.ICredentials
http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

У интерфейса всего 1 метод - GetCredential(). Возвращает " NetworkCredential object that is associated with the specified URI, and authentication type."

На сервере -

Получите NetworkCredential из метода System.Net.ICredentials.GetCredential().

http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

Передайте на клиент параметры из NetworkCredential. Создайте NetworkCredential на клиенте используя эти параметры.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 17.01.2014, 10:10   #13  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Это интерфейс, а не класс.
System.Net.ICredentials
http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

У интерфейса всего 1 метод - GetCredential(). Возвращает " NetworkCredential object that is associated with the specified URI, and authentication type."

На сервере -

Получите NetworkCredential из метода System.Net.ICredentials.GetCredential().

http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

Передайте на клиент параметры из NetworkCredential. Создайте NetworkCredential на клиенте используя эти параметры.
Честно говоря немного не так. Я объявляю переменную типа
Код:
System.Net.ICredentials   credentials
.
В данную переменную с помощью статического метода
Код:
System.Net.CredentialCache::get_DefaultCredentials();
получаю объект NetworkCredential. Но так как в этом объекте есть privet поля то я не могу сериализовать его. Получить все параметры для создания объекта на клиенте я так же не могу. Этот объект не сериализуемый по соображениям безопасности.

Последний раз редактировалось maldini; 17.01.2014 в 10:17.
Старый 17.01.2014, 15:40   #14  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Вы пытаетесь решить некую локальную проблему (передача CLRObject из серверного метода на клиент). Может если вы опишите что вы патаетесь сделать на более высоком уровне, то кто то сможет помочь? Зачем объект надо передавать на клиента, почему нельзя сделать все на сервере? Или все на клиенте? Или может принципиально вы не в ту стороны копаете.....
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 17.01.2014, 17:06   #15  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Вы пытаетесь решить некую локальную проблему (передача CLRObject из серверного метода на клиент). Может если вы опишите что вы патаетесь сделать на более высоком уровне, то кто то сможет помочь? Зачем объект надо передавать на клиента, почему нельзя сделать все на сервере? Или все на клиенте? Или может принципиально вы не в ту стороны копаете.....
Вся операция специально выполняется на клиенте, но в данном конкретном случае хотелось получить NetworkCrendles с сервера. Чтобы не переписывать всю реализацию я и пытался с помощью статического серверного метода получить объект и передать его на клиент. Но пришлось пойти другими путями - создать NetworkCredentialс помощью параметров.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача бинарных файлов с клиента на AOS и обратно corvax DAX: Программирование 9 01.04.2014 15:05
emeadaxsupport: CLRObject could not be created error when entering Tools/Options in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 0 09.10.2012 17:11
axforum blogs: Подружить Аксапту и клиент-банк Blog bot DAX Blogs 0 14.01.2011 09:11
Передать данные с сервера на клиент при формировании Excel отчета Eldar9x DAX: Программирование 10 21.10.2008 15:39
Связь с клиент-банк SAN DAX: База знаний и проекты 32 08.10.2004 13:18

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

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

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