2009-02-27 6 views
2

J'ai écrit la plupart du code de travail en utilisant WCF où un client s'abonne à un serveur et le serveur pousse des données au client.Définition de receiveTimeout pour les rappels dans WCF?

Je suis parti en cours d'exécution pendant un certain temps et j'ai essayé d'envoyer des données au client et j'ai reçu une exception qui m'a indiqué que je devais définir la propriété receiveTimeout.

Où puis-je définir cette propriété? Partout où je vois ce problème traité, il semble que le code WCF ait été généré en utilisant svcutil.exe. Je ne l'ai pas fait et je ne veux pas vraiment recommencer à zéro.

Répondre

3

J'ai découvert comment procéder, lors de la création du côté client de tuyau, vous devez définir explicitement le délai d'expiration de la liaison.

NetNamedPipeBinding binding = new NetNamedPipeBinding(); 
binding.ReceiveTimeout = new TimeSpan(1,0,0); 
binding.SendTimeout = new TimeSpan(1,0,0); 
DuplexChannelFactory<IVdnServer> pipeFactory = new 
    DuplexChannelFactory<IVdnServer>(_subscriber, binding, 
     new EndpointAddress("net.pipe://localhost/PipeService")); 

Lorsque vous créez le côté serveur de point de terminaison de service, vous devez également définir explicitement le délai d'attente.

NetNamedPipeBinding binding = new NetNamedPipeBinding(); 
binding.ReceiveTimeout = new TimeSpan(1,0,0); 
binding.SendTimeout = new TimeSpan(1,0,0); 

_host.AddServiceEndpoint(typeof(IVdnServer),binding , "PipeReverse"); 
Questions connexes