У меня есть служба WCF с Property<T> DataContract
(с KnownType и так далее ...), но в клиенте Silverlight у меня есть только PropertyOfint, PropertyOfstring, ...
типов, но в Silverlight мне также нужен общий тип. Как?
MyType ‹T› DataContract находится в клиенте Silverlight MyTypeOfT
Ответы (1)
Стандарт мыла не поддерживает концепцию дженериков, поэтому он не поддерживается напрямую в WCF. Однако вы можете добиться эта поддержка, если вы управляете и клиентом, и службой WCF, разделяя DLL ServiceContract между клиентом и службой. Убедитесь, что это действительно то, что вам нужно, поскольку это не рекомендуемой передовой практикой SOA.
- это статья, описывающая, как это подход работает. Предоставляя общий доступ к ServiceContract (не DLL реализации службы) и используя класс WCF ChannelFactory, вам не нужно создавать прокси-класс, поскольку класс ChannelFactory будет делать это динамически за вас. Сборка ServiceContract также должна будет содержать все классы, на которые указывает ссылка DataMember, что является основным недостатком этого подхода, поскольку любая логика, которую они содержат, также будет совместно использоваться. Пока классы DataMember являются просто объектами передачи данных (DTO), вы не исключаете полностью измененную форму клиентов SOA. В статье также объясняется, как это сделать с помощью класса WCF ClientBase.