Я обновил существующее приложение WCF, чтобы добавить поддержку protobuf-net.
По сути, я:
добавлен protobuf-net.dll (.net 3.0) в качестве ссылки в сборке, содержащей все мои объекты данных. На эту сборку ссылаются как мой сервер, так и мой клиент
заменено [DataMember] на [DataMember (Order = x)] (с использованием увеличивающихся целых чисел как x)
Обновлены все мои OperationContracts с атрибутом ProtoBehavior
Обновлен мой сервисный номер
С клиента я вызываю этот метод на сервере:
[OperationContract(IsOneWay = false), ProtoBehavior]
ConnectionData Join(string userId, string Password);
, где ConnectionData определяется следующим образом:
[DataContract]
public class ConnectionData
{
[DataMember(Order = 1)]
public ConnectionStatusEnum ConnectionStatus; // this is a normal enum with five elements
// .....
[DataMember(Order = 5)]
public bool MustChangePassword;
}
Теперь вот что происходит:
Если я отлаживаю сервер, я вижу, что объект ConnectionData правильно инициализирован и возвращен в методе Join
Если я отлаживаю клиента, я вижу нулевой объект, возвращаемый из моего вызова Join
Я включил трассировку WCF до максимальной детализации, в журнале сервера ничего не бросалось в глаза, но в файле журнала клиента я видел это предупреждение:
System.Runtime.Serialization.ElementIgnored
Нераспознанный элемент был
встречаются в XML во время
десериализация, которая была проигнорирована.
Элемент http://tempuri.org/:proto
Я понюхал свой сетевой трафик и не виню protobuf-net за неспособность десериализовать это:
<s:Body><JoinResponse xmlns="http://tempuri.org/"><proto/></JoinResponse></s:Body>
Как я могу дополнительно устранить проблему и получить protobuf-net для правильной сериализации моих сообщений?
Я использую protobuf-net r275