MyType ‹T› DataContract находится в клиенте Silverlight MyTypeOfT

У меня есть служба WCF с Property<T> DataContract (с KnownType и так далее ...), но в клиенте Silverlight у меня есть только PropertyOfint, PropertyOfstring, ... типов, но в Silverlight мне также нужен общий тип. Как?


person Aaaaaaaa    schedule 11.05.2011    source источник
comment
Я не уверен, что понимаю вопрос. Silverlight поддерживает универсальные шаблоны.   -  person    schedule 11.05.2011


Ответы (1)


Стандарт мыла не поддерживает концепцию дженериков, поэтому он не поддерживается напрямую в WCF. Однако вы можете добиться эта поддержка, если вы управляете и клиентом, и службой WCF, разделяя DLL ServiceContract между клиентом и службой. Убедитесь, что это действительно то, что вам нужно, поскольку это не рекомендуемой передовой практикой SOA.

- это статья, описывающая, как это подход работает. Предоставляя общий доступ к ServiceContract (не DLL реализации службы) и используя класс WCF ChannelFactory, вам не нужно создавать прокси-класс, поскольку класс ChannelFactory будет делать это динамически за вас. Сборка ServiceContract также должна будет содержать все классы, на которые указывает ссылка DataMember, что является основным недостатком этого подхода, поскольку любая логика, которую они содержат, также будет совместно использоваться. Пока классы DataMember являются просто объектами передачи данных (DTO), вы не исключаете полностью измененную форму клиентов SOA. В статье также объясняется, как это сделать с помощью класса WCF ClientBase.

person Sixto Saez    schedule 11.05.2011
comment
Хорошо, но возможно ли что-то вроде Convert.ChangeType? - person Aaaaaaaa; 12.05.2011
comment
Не совсем потому, что тип, который вы пытаетесь преобразовать, должен реализовывать интерфейс IConvertible, который не будет выполнять ни Add Service Reference, ни SvcUtil. Я ответил на вопрос в этих строках здесь. Ответы там (не только мои ) может помочь вам понять ограничения объектов WCF. По сути, объекты WCF не предназначены для использования в качестве объектов .NET. Самое близкое, что вы можете сделать, - это совместное использование контрактных DLL, что, как правило, нехорошо. - person Sixto Saez; 12.05.2011