WCF :: Как передать object
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
WCF :: Как передать object
|
|
|
|
|
Нужно передать Object через WCF.
Что-то не получается =( ![]() ![]() /// <summary> /// Объект параметра задачи /// </summary> [DataContract] public class TaskArgument{ /// <summary> /// Имя аргумента /// </summary> [DataMember] public string Name; /// <summary> /// Значение аргумента /// </summary> [DataMember] public object Value; /// <summary> /// Конструктор /// </summary> public TaskArgument(){ this.Name = string.Empty; this.Value = null; } } если Value - строка или число, то нормально уходит. Если скажем List< string > то клиент отправляет, а сервер не принимает и даже не ругается. Как передать тип object ? |
|
Сообщ.
#2
,
|
|
|
|
И сервер и клиент должны знать какие фактические типы могут быть переданы в качестве object еще на момент создания ссылки на сервис. Таким образом нужно или перечислить отсутствующие в контракте данных типы при помощи аттрибута ServiceKnownType или изменить тип с object на string или byte[] и сериализовать.
То же самое касается и передачи интерфейсов, базовых (абстрактных) классов. |
|
Сообщ.
#3
,
|
|
|
|
Жаль что WCF сам не умеет сериализовать =(
Сделал на бинарной сериализации и передачей в byte[] т.к. KnownTypes не подходит ибо по замыслу передавать можно что угодно. |
|
Сообщ.
#4
,
|
|
|
|
Цитата KnownTypes не подходит ибо по замыслу передавать можно что угодно. ИМХО Это неправильная архитектура. Протокол и типа данных в нем, должны быть заведомо известны. |
|
Сообщ.
#5
,
|
|
|
|
Цитата HardRock @ Жаль что WCF сам не умеет сериализовать =( Сериализовать он как раз умеет, но как он ДЕсериализует, скажем, кастомный объект, объявленный на клиенте несколькими строками выше перед вызовом сервиса? Как минимум все SOAP-based веб-сервисы кроме примитивов могут полноценно передавать\принимать только те типы, которые объявлены в контракте данных этого сервиса. |