2010-05-26 7 views
0

Je n'arrive pas à trouver un moyen de faire fonctionner un service WCF de canal nommé. Le service est dans un assembly séparé de l'exécutable.Problèmes de connexion au service WCF via NetNamedPipeBinding

La configuration ressemble à ceci:

<system.serviceModel> 
    <bindings> 
     <netNamedPipeBinding> 
     <binding name="NoSecurityIPC"> 
      <security mode="None" /> 
     </binding> 
     </netNamedPipeBinding> 
    </bindings> 
    <client> 
     <endpoint name="internal" 
     address="net.pipe://localhost/" 
     binding="netNamedPipeBinding" 
     bindingConfiguration="NoSecurityIPC" 
     contract="TimeService.ITimeService" /> 
    </client> 
    <services> 
     <service name="TimeService"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.pipe://localhost/" /> 
      </baseAddresses> 
     </host>    
     <endpoint name="internal" 
      address="net.pipe://localhost/" 
      binding="netNamedPipeBinding" 
      bindingConfiguration="NoSecurityIPC" 
      contract="TimeService.ITimeService" /> 
     </service> 
    </services> 
    </system.serviceModel> 

J'utilise un ChannelFactory pour créer un proxy pour accéder à l'hôte de service:

ServiceHost h = new ServiceHost(typeof(TimeService), new Uri("net.pipe://localhost/")); 
h.AddServiceEndpoint(typeof(ITimeService), new NetNamedPipeBinding("NoSecurityIPC"), ""); 
h.Open(); 

ChannelFactory<ITimeService> factory = new ChannelFactory<ITimeService>("internal"); 

ICpTimeService proxy = factory.CreateChannel(); 

using (proxy as IDisposable) 
{     
    this.ds = proxy.LoadData(); 
} 

Je ne sais pas ce que je fais mal quand je crée la ChannelFactory. Il ne peut pas sembler trouver le "channel1" dans la config. Lorsque je crée ma liaison manuellement et la passe au constructeur ChannelFactory, la fabrique et le proxy sont créés mais l'appel à LoadData() échoue (expire).

Quelqu'un peut-il voir ce que je fais mal ici?

EDIT: J'ai modifié au-dessus de app.config pour m'assurer que les deux extrémités ont exactement les mêmes données. Cela a résolu mon problème Channelfactory. Toutefois, l'appel à la méthode de service décrite ci-dessus expire toujours.

+0

est-il possible que LoadData prenne réellement plus de temps par défaut? – Vitalik

+0

Non, ne prend qu'une fraction de seconde! – John

+0

Activer le suivi WCF est toujours un bon moyen de diagnostiquer des mystères comme celui-ci; il montrerait exactement où le délai d'attente se produit. –

Répondre

0

Je ne vois pas la description du problème dans le message d'erreur réel et il est donc difficile de deviner quel est le problème. Est-il possible que vous essayiez d'exécuter ceci sous un compte non-administrateur? J'ai actuellement des problèmes pour obtenir WCF avec NetNamedPipeBinding comme une forme d'IPC sous des comptes d'utilisateur non-administrateur sur Windows 7. Peut-être que vous rencontrez le même problème?

Questions connexes