L’appel WCF est-il disponible sur les objects transmis et reçus?

Nous avons un contrat qui passe un gros object en streaming. Les contrats de service et de message se résument à ceci.

[ServiceContract] public interface IData { [OperationContract] Item Get(ItemRequest request); [OperationContract] void Put(Item request); } [MessageContract] public class Item: IDisposable { [MessageBodyMember(Order = 1)] public Stream FileByteStream; public void Dispose() {...} } 

La classe Item fournit une implémentation standard du motif Jetable. Ma question est la suivante: WCF appelle-t-il la méthode Dispose de la classe Item? WCF via ServiceHost assume la responsabilité de transmettre et de recevoir l’object Article de la mise en œuvre de notre contrat de service.

Il existe de nombreux exemples sur le Web (comme celui- ci ), mais aucun d’eux n’appelle jamais disposer ou mentionner si cela se produit.

WCF ne “prend pas la responsabilité” de l’object. WCF ne fait que sérialiser l’object que vous y passez d’un côté et en crée un nouveau de l’autre côté.

Il n’y a vraiment rien que WCF puisse s’approprier… donc je ne vois pas pourquoi on pourrait penser que WCF aurait une raison quelconque de disposer d’un object qui lui est transmis.

Habituellement, vous feriez quelque chose comme ça:

 var proxy = new MyService(); var myobject = new MyObject(); proxy.Send(myobject); // here myobject is still alive, and you can still do things with it.. 

MODIFIER:

Il me semble que vous parlez en réalité de la valeur renvoyée par un service. Dans ce cas, oui .. par défaut, WCF appellera la suppression sur les deux parameters transmis et retournés. Toutefois, cela est contrôlé par la propriété OperationBehaviorAtsortingbute.AutoDisposeParameters, qui a par défaut la valeur true.

Si vous définissez ce paramètre sur false, vous êtes responsable de l’appel de dispose, généralement dans le gestionnaire d’événements OperationContext.OperationCompleted.