← Back

Comments (17)

Login or Create account, Log in or register to leave a comment

Tauler
Tauler Author

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

Mikhail Sukhov
Mikhail Sukhov

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

Tauler
Tauler Author

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

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

Tauler
Tauler Author

Провел эксперимент с 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
Tauler Author

Нет, дело не в DataContract. Только что сделал класс с этим аттрибутом

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

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

Mikhail Sukhov
Mikhail Sukhov

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

Tauler
Tauler Author

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

Tauler
Tauler Author

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

Mikhail Sukhov
Mikhail Sukhov

Указывайте полное имя - 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
Tauler Author

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

Tauler
Tauler Author

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

Mikhail Sukhov
Mikhail Sukhov

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

Tauler
Tauler Author

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

Tauler
Tauler Author

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

Mikhail Sukhov
Mikhail Sukhov

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

Tauler
Tauler Author

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