WCF est pas un "appel d'objet à distance" méthode ou quoi que ce soit - c'est pur message-passing. Donc, un paramètre "by-ref" peut compiler, mais il ne va vraiment rien faire d'utile.
Sur votre client, vous disposez d'une méthode avec les paramètres que vous appelez. L'exécution de WCF intercepte alors cet appel, regroupe les paramètres et toutes les informations supplémentaires nécessaires dans un message, sérialise ce message (en XML textuel ou binaire) et envoie ce message à travers le réseau au serveur. Le serveur désérialise ensuite les messages en un ensemble de paramètres, puis le composant répartiteur sur le serveur instancie la classe de service et appelle la méthode appropriée sur cette instance de classe de service avec les paramètres du message.
Toute l'histoire fonctionne en arrière pour la réponse que le serveur renvoie.
Mais encore une fois: tout ce que vous échangez entre le client et le serveur est un message sérialisé - il n'y a absolument inutile de faire un paramètre « par ref » - cela ne peut pas être un paramètre par référence, à la fin. Le serveur et le client sont des mondes totalement séparés, des objets et des classes totalement séparés - ils se ressemblent simplement sur le fil. Je pense donc que quiconque a écrit cette méthode WCF ne comprenait pas les principes du passage de message WCF, mais a été attiré par la façon dont WCF se sent - comme un simple appel de méthode. Mais ce n'est vraiment pas seulement un appel de méthode à la fin.
C'est exactement ce que je pensais. Et après votre réponse, j'ai décidé de faire un test. Semble étrange, mais l'infrastructure WCF gère le par ref: si le service apporte des modifications à l'argument ref, après que l'appel retourne au client, l'argument passé reflète ces changements. – MatteoSp
@MatteoSp: c'est très intéressant à entendre! Je n'ai même pas pris la peine d'essayer, puisque de tout ce que je savais j'étais convaincu que ça ne marcherait jamais - mieux vaut essayer moi-même! :-) Encore poser la question si c'est vraiment une bonne idée, cependant .... –
@marc_s Un peu en retard mais, WCF par défaut est le style RPC. Après tout, nous appelons une méthode sur un objet (proxy) et par magie la méthode fonctionne sur un serveur. Pour utiliser le style 'messagerie', nous devons utiliser des contrats de message qui nous donnent le contrôle total du message SOAP. – thewpfguy