А вообще хорошо бы чтобы все сущности были бы сериализуемы. дело в
том, что в/из Workflow процесса можно передавать только сериализуемые
объекты.
Это сложно сделать?
надо чтобы класс (ну и все классы, поля кторых ест ьв этом классе)
был с атрибутом [Serizalized]. Я заметил что у вас установлен атрибут
[DataContract], но это для WCF подходит.
Провел эксперимент с 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...
Нет, дело не в DataContract. Только что сделал класс с этим аттрибутом
все прокатило. Может WF чтобы использовать внешние сборки нужен
PublicKeyToken? Видимо он ищет сборки в проэктах, если не находит - то
в CAG. как то так...
ну там немножко хитро - я не в рантайме указываю переменну, а
показываю какого гласса переменная БУДЕТ создана . там что то типа
конструктора. дело то не в этом. Дело в том, что компилятор не видит
классов в сборке Ecng.Trading.BusinessEntities, хотя в дизайн тайме
видит.
А вообще помоему собака глбще зарылась. он что то на PUblicKeyToken
ругается, когда пытается загрузить сборку, в кторой есть ссылка на
другую сборку и используется код из этой другой сборки.
Указывайте полное имя - Ecng.Trading.BusinessEntities,
Version=1.8.0.0, Culture=neutral, PublicKeyToken=null
Но дело тут в другом - сериализация в WF не такая как в WCF -
Ну этот W/A по идее сработает только в 3.5 WF, да и не сработает :)
скажет что композитор несериализуем, т.к. в енм будет несериализуемый
класс. И предок должен быть сериализуем. Вот такая вот петрушка.
а в 4.0 вообще непонятно что - тут не только с Вашей библиотекой
проблемы... С моими классами, кторые NHibernate используют тоже беда.
Видимо в 4.0 WF проблема с импользованием классов, кторые используют
другие классы, как то так. Вот например ругается на сборку, которая
содержит класс, кторые в свою очередь в методе создает экземпляр DAO и
использует его.А DAO использует NHibernate. И тут такая же картина...
Сложно ответить, потому что я сам WF давно не использовал. 4.0 - это
особая версия. Она не гарантирует обратную совместимость со старыми
сборками -http://rsdn.ru/forum/dotnet/3774887.flat.aspx. Вам
критично новый фреймворк? Может пока выставите Target FW - 3.5
В общем победил я эту дотнетину :) Майкрософт - это же банда
малдеров и скалли вкупе с мальчишами кибальчишами :) Тщательная
препарация показала. что просто проект, в ктором разрабатывался
воркфлоу не мог не то что тип в сборке найти - ане мог сборку
загрузить (это малдер и скалли - "истина где то рядом" :) )методом НТТ
(научно технического тыка) дошел до того, что в форквлой проект вот
ентот самый таргет в закладке Build(вроде в ней, по паамяти пишу)
чтоял .NET Framework 4.0 Client Profile. выставил там в в просто NET
Framework 4.0 - все пошло как по маслу. И сборки нашел, и типы в них,
и код выполнил. два дня проковырялся, половину всего интернета
прочитал :) Вот. а с 3.5 я говорил какой трабл - толжны быть классы,
их потомки и все классы, типы кторых используются в классах с
атрибутом [Serizalised], наследование и композиция не прокатывает.
Иначе 3.5 WF заворачивает такую переменну со словами "это
несериализуемый тип". кстати в 4.0 WF вроде как не нужн очтобы типы
были сериализуемые.
Насчеи критично четвертый дотне - я бы в него не полез бы, если бы в
3.5 все получалось :) Но - не судьба :) да и WF 4 получше будет. мне
же нужно такой API намутить, чтобы пользователи, не шибко грамотные с
C#, могли там сами нарисовать робота, используя средства WF для
логики, и API для торговых махинаций.
ага, они писали в ответ на гневный запрос - типа какого хрена мои
классы под WCF не работают в WF? культурно ответили - в след версии
фреймворка поправим :) и ктсати вроде без атрибута DataContract вроде
работает, завтра точнее проверю. кстати оффтом - а зачкм Вы свои
классы из BusinessEntities этим атрибутом пометили?
We use cookies to ensure the best experience on our website. By continuing to use our site, you agree to the use of cookies.
Comments (17)
Login or Create account, Log in or register to leave a comment
А вообще хорошо бы чтобы все сущности были бы сериализуемы. дело в том, что в/из Workflow процесса можно передавать только сериализуемые объекты. Это сложно сделать?
Какую сериализацию использует WWF?
да обычную видимо
надо чтобы класс (ну и все классы, поля кторых ест ьв этом классе) был с атрибутом [Serizalized]. Я заметил что у вас установлен атрибут [DataContract], но это для WCF подходит.
Провел эксперимент с 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
Нет, дело не в DataContract. Только что сделал класс с этим аттрибутом
Хотя тогда непонятно почему прокатиывает из Ecng.Common
Переменная типа MathHelper? Но это невозможно. Это статический класс, а на такой класс невозможно создавать объекты.
ну там немножко хитро - я не в рантайме указываю переменну, а показываю какого гласса переменная БУДЕТ создана . там что то типа конструктора. дело то не в этом. Дело в том, что компилятор не видит классов в сборке Ecng.Trading.BusinessEntities, хотя в дизайн тайме видит.
А вообще помоему собака глбще зарылась. он что то на PUblicKeyToken ругается, когда пытается загрузить сборку, в кторой есть ссылка на другую сборку и используется код из этой другой сборки.
Указывайте полное имя - 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
Ну этот W/A по идее сработает только в 3.5 WF, да и не сработает :) скажет что композитор несериализуем, т.к. в енм будет несериализуемый класс. И предок должен быть сериализуем. Вот такая вот петрушка. а в 4.0 вообще непонятно что - тут не только с Вашей библиотекой проблемы... С моими классами, кторые NHibernate используют тоже беда. Видимо в 4.0 WF проблема с импользованием классов, кторые используют другие классы, как то так. Вот например ругается на сборку, которая содержит класс, кторые в свою очередь в методе создает экземпляр DAO и использует его.А DAO использует NHibernate. И тут такая же картина...
Причем есть подозрение что не видит библиотеки .скомпиленые под дотнет меньше 4-го
Сложно ответить, потому что я сам WF давно не использовал. 4.0 - это особая версия. Она не гарантирует обратную совместимость со старыми сборками -http://rsdn.ru/forum/dotnet/3774887.flat.aspx. Вам критично новый фреймворк? Может пока выставите Target FW - 3.5
В общем победил я эту дотнетину :) Майкрософт - это же банда малдеров и скалли вкупе с мальчишами кибальчишами :) Тщательная препарация показала. что просто проект, в ктором разрабатывался воркфлоу не мог не то что тип в сборке найти - ане мог сборку загрузить (это малдер и скалли - "истина где то рядом" :) )методом НТТ (научно технического тыка) дошел до того, что в форквлой проект вот ентот самый таргет в закладке Build(вроде в ней, по паамяти пишу) чтоял .NET Framework 4.0 Client Profile. выставил там в в просто NET Framework 4.0 - все пошло как по маслу. И сборки нашел, и типы в них, и код выполнил. два дня проковырялся, половину всего интернета прочитал :) Вот. а с 3.5 я говорил какой трабл - толжны быть классы, их потомки и все классы, типы кторых используются в классах с атрибутом [Serizalised], наследование и композиция не прокатывает. Иначе 3.5 WF заворачивает такую переменну со словами "это несериализуемый тип". кстати в 4.0 WF вроде как не нужн очтобы типы были сериализуемые.
Насчеи критично четвертый дотне - я бы в него не полез бы, если бы в 3.5 все получалось :) Но - не судьба :) да и WF 4 получше будет. мне же нужно такой API намутить, чтобы пользователи, не шибко грамотные с C#, могли там сами нарисовать робота, используя средства WF для логики, и API для торговых махинаций.
Судя поhttp://www.zamd.net/2008/11/03/WhatsNewInWFV40.aspx, теперь используется DataContractSerializer. Поэтому и работает.
ага, они писали в ответ на гневный запрос - типа какого хрена мои классы под WCF не работают в WF? культурно ответили - в след версии фреймворка поправим :) и ктсати вроде без атрибута DataContract вроде работает, завтра точнее проверю. кстати оффтом - а зачкм Вы свои классы из BusinessEntities этим атрибутом пометили?