Voici quelques problèmes rencontrés pendant ma découverte de ProtoBuf :

Les objets transférés ne sont pas récupérés

Cause

Lors de la récupération de la définition du service WCF dans le client, l’utilisation des options par défaut régénère les classes précédemment créées par protogen.

Ceci entraine une impossibilité de récupérer ces objets via Wcf dans les deux sens.

En effet, protogen crée des attributs sur la classe et ses membres qui permettent à protobuf-net de sérialiser et dé-sérialiser les objets.

Les options par défaut ne génère pas ces attributs.

Solution

La solution que je vous propose est assez simple et plutôt pratique en terme de maintenance du code :

Créer un projet Library d'entités protobuf.

En effet, il suffit d’utiliser ce projet comme référence du service WCF et du client et lors de la génération de la référence du service dans le client de réutiliser les classes de ce nouveau projet (cf. code source de l’exemple disponible ici).

Impossible de transférer une liste d’objet protobuf

Cause

Protobuf-net ne peut pas transférer une System.Generic.List d’objet directement.

Solution

Il faut encapsuler cette liste dans une réponse en créant le fichier proto correspondant.

Par exemple une liste de personnes :

message Person
{
    required string FirstName = 1;
    required string LastName = 2;
}

message ListOfPerson
{
    repeated Person Persons = 1 ;
}

Il suffit de passer un objet ListOfPerson au service WCF.