Сериализация
Atom Ответить
15.04.2010


Михаил, скажите, а классы в пространстве имен BusinessEnityt
сериализуемы? в частоности MarketDepth и Quotes?

Теги:


Спасибо:




17 Ответов
Tauler

Фотография
Дата: 15.04.2010
Ответить


А вообще хорошо бы чтобы все сущности были бы сериализуемы. дело в
том, что в/из Workflow процесса можно передавать только сериализуемые
объекты.
Это сложно сделать?

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.04.2010
Ответить


Какую сериализацию использует WWF?

Спасибо:

Tauler

Фотография
Дата: 16.04.2010
Ответить


да обычную видимо

надо чтобы класс (ну и все классы, поля кторых ест ьв этом классе)
был с атрибутом [Serizalized]. Я заметил что у вас установлен атрибут
[DataContract], но это для WCF подходит.

Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Провел эксперимент с Workflow 4.0 (тот чт ов дотнете 4). Вскрытие
показало, что этот воркфлоу ( в ктором уже не надо ставить аттрибут
[Serializable], так же отказывается работаь с классами из сборки
Ecng.Trading.BusinessEntities.dll . При компиляции попростуо
утверждает что

Error 3 Could not find type
'Ecng.Trading.BusinessEntities.MarketDepth' in assembly
'Ecng.Trading.BusinessEntities'. C:\Work\test\TradingComplex\SpreaderWF
\Workflow1.xaml 7 8 SpreaderWF

Причем, если в какой либо другой зборке есть класс с полем типа из
Ecng.Trading.BusinessEntities, то абсолютно такая же картина, только
он не находит тот класс, кторый содержит поле типа из сборки
Ecng.Trading.BusinessEntities.

Есть подозрение на атрибут DataContract, т.к. без него все прокатывает
(я ради интереса попробовал передать пеерменну типа
Ecng.Common.MathHelper). Михаил, может убрать этот жуткий атрибут?
наскольк я понял польза от него только в WCF...

--
Subscription settings:http://groups.google.com/group/stocksharp/subscribe?hl=ru


Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Нет, дело не в DataContract. Только что сделал класс с этим аттрибутом
- все прокатило. Может WF чтобы использовать внешние сборки нужен
PublicKeyToken? Видимо он ищет сборки в проэктах, если не находит - то
в CAG. как то так...

Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Хотя тогда непонятно почему прокатиывает из Ecng.Common

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


Переменная типа MathHelper? Но это невозможно. Это статический класс,
а на такой класс невозможно создавать объекты.

Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


ну там немножко хитро - я не в рантайме указываю переменну, а
показываю какого гласса переменная БУДЕТ создана . там что то типа
конструктора. дело то не в этом. Дело в том, что компилятор не видит
классов в сборке Ecng.Trading.BusinessEntities, хотя в дизайн тайме
видит.

Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


А вообще помоему собака глбще зарылась. он что то на PUblicKeyToken
ругается, когда пытается загрузить сборку, в кторой есть ссылка на
другую сборку и используется код из этой другой сборки.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


Указывайте полное имя - Ecng.Trading.BusinessEntities,
Version=1.8.0.0, Culture=neutral, PublicKeyToken=null
Но дело тут в другом - сериализация в WF не такая как в WCF -

http://msmvps.com/blogs/williamryan/archive/2008/11/01/wf-persistence-where-datacontract-serializable.aspx

В следующие версии я добавлю атрибут для сериализации. Как workaround
- сейчас можно создать наследника (или класс-композитор), который
поменить Serializable.

Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Ну этот W/A по идее сработает только в 3.5 WF, да и не сработает :)
скажет что композитор несериализуем, т.к. в енм будет несериализуемый
класс. И предок должен быть сериализуем. Вот такая вот петрушка.
а в 4.0 вообще непонятно что - тут не только с Вашей библиотекой
проблемы... С моими классами, кторые NHibernate используют тоже беда.
Видимо в 4.0 WF проблема с импользованием классов, кторые используют
другие классы, как то так. Вот например ругается на сборку, которая
содержит класс, кторые в свою очередь в методе создает экземпляр DAO и
использует его.А DAO использует NHibernate. И тут такая же картина...

Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Причем есть подозрение что не видит библиотеки .скомпиленые под дотнет
меньше 4-го

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


Сложно ответить, потому что я сам WF давно не использовал. 4.0 - это
особая версия. Она не гарантирует обратную совместимость со старыми
сборками -http://rsdn.ru/forum/dotnet/3774887.flat.aspx. Вам
критично новый фреймворк? Может пока выставите Target FW - 3.5

Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


В общем победил я эту дотнетину :) Майкрософт - это же банда
малдеров и скалли вкупе с мальчишами кибальчишами :) Тщательная
препарация показала. что просто проект, в ктором разрабатывался
воркфлоу не мог не то что тип в сборке найти - ане мог сборку
загрузить (это малдер и скалли - "истина где то рядом" :) )методом НТТ
(научно технического тыка) дошел до того, что в форквлой проект вот
ентот самый таргет в закладке Build(вроде в ней, по паамяти пишу)
чтоял .NET Framework 4.0 Client Profile. выставил там в в просто NET
Framework 4.0 - все пошло как по маслу. И сборки нашел, и типы в них,
и код выполнил. два дня проковырялся, половину всего интернета
прочитал :) Вот. а с 3.5 я говорил какой трабл - толжны быть классы,
их потомки и все классы, типы кторых используются в классах с
атрибутом [Serizalised], наследование и композиция не прокатывает.
Иначе 3.5 WF заворачивает такую переменну со словами "это
несериализуемый тип". кстати в 4.0 WF вроде как не нужн очтобы типы
были сериализуемые.

Автор топика
Спасибо:

Tauler

Фотография
Дата: 19.04.2010
Ответить


Насчеи критично четвертый дотне - я бы в него не полез бы, если бы в
3.5 все получалось :) Но - не судьба :) да и WF 4 получше будет. мне
же нужно такой API намутить, чтобы пользователи, не шибко грамотные с
C#, могли там сами нарисовать робота, используя средства WF для
логики, и API для торговых махинаций.

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2010
Ответить


Судя поhttp://www.zamd.net/2008/11/03/WhatsNewInWFV40.aspx, теперь
используется DataContractSerializer. Поэтому и работает.

Спасибо:

Tauler

Фотография
Дата: 20.04.2010
Ответить


ага, они писали в ответ на гневный запрос - типа какого хрена мои
классы под WCF не работают в WF? культурно ответили - в след версии
фреймворка поправим :) и ктсати вроде без атрибута DataContract вроде
работает, завтра точнее проверю. кстати оффтом - а зачкм Вы свои
классы из BusinessEntities этим атрибутом пометили?

Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy