Клиент WCF не утверждает, что сообщение сериализуемо - PullRequest
2 голосов
/ 03 апреля 2012

Я отправляю объект в службу WCF.Объект не известен DataContractSerializer ни ни на стороне клиента, ни на стороне обслуживания.Я ожидал бы получить ошибку сериализации на стороне клиента в этом случае, но вместо этого, отправка на стороне клиента успешна, я только не получаю ответ от службы (после таймаута отправки).Я проверил трассировки WCF и увидел, что на стороне сервера произошла ошибка десериализации.

Как заставить клиента WCF проверить, можно ли сериализовать отправляемый объект?

Обновление: пытаясь воспроизвести проблему в простом сценарии, мне удалось изолировать ее, чтобы она относилась к опции конфигурации «ReliableSession».Проблема возникает, только когда включен надежный сеанс на стороне клиента или сервера.

Пожалуйста, обратитесь к этой сущности для демонстрации: https://gist.github.com/2291505

1 Ответ

0 голосов
/ 03 апреля 2012

DataContractSerializer, используемый WCF, является сериализатором "отказа" и будет пытаться сериализовать все объекты, которые вы ему предоставляете, независимо от того, помечены они или нет атрибутами [DataContract].Единственный способ остановить это - явно пометить ваши объекты атрибутами [IgnoreDataMember].

См. здесь для получения дополнительной информации о том, как DataContractSerializer будет сериализовать ваши типы.

Очевидно, что ваш клиент может сериализовать OK, иначе WCF выдаст ошибку, но я предполагаю, что серверная сторона не ожидает чего-то, что вы отправляете.Можете ли вы дать какую-либо информацию об ошибке?

РЕДАКТИРОВАТЬ: Я подозреваю, что это потому, что вы отправляете неизвестного типа.Конец службы знает о строках, поэтому может успешно десериализовать их, но ничего не знает об объекте Person, поэтому не знает, что с ним делать.(Клиент знает, что такое Person, поэтому может его сериализовать нормально).

Попробуйте добавить [ServiceKnownType(typeof(Person))] к определению вашего сервиса.Очевидно, что сервису потребуется доступ к объекту Person для компиляции.

...