2010-12-19 4 views
1

Je crée un service WCF qui, pour le moment, expose un certain nombre de contrats en utilisant un basicHttpBinding. Cependant, je veux maintenant utiliser le service localement sur la même machine, et un netNamedPipeBinding semble plus approprié en termes de performance. Pour cette raison, je veux exposer le service en utilisant un tube nommé et HTTP.WCF HTTP et le service NamedPipe

En ce moment je fais cela avec la configuration suivante:

<service name="WCFService.MyService" behaviorConfiguration="serviceBehaviour"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8080/MyService" /> 
     <add baseAddress="net.pipe://localhost/MyService" /> 
     </baseAddresses> 
    </host> 

    <endpoint address="calculator" binding="basicHttpBinding" contract="WCFService.ICalculatorService" /> 
    <endpoint address="database" binding="basicHttpBinding" contract="WCFService.IDatabaseService" /> 
</service> 

Cela semble fonctionner correctement, mais un examen plus approfondi des points de terminaison utilisent encore le basicHttpBinding. Cela fonctionne, mais j'ai l'impression que cela crée des frais inutiles. Ai-je besoin de créer un point de terminaison pour chaque contrat et chaque type de liaison (par exemple, basicHttpBinding et netNamedPipeBinding) ou suis-je complètement dans l'erreur?

(! Si on ne sait pas, je suis assez nouveau pour WCF)

+0

Dans .NET 4, vous pourrait permettre à WCF de gérer ceci: vous pourriez définir seulement les deux adresses de base, et WCF créerait un point de terminaison pour chaque liaison et chaque contrat de service qu'elle trouve, par exemple un total de quatre points d'extrémité –

Répondre

1

Oui, vous devez spécifier plusieurs critères d'évaluation (1 point d'extrémité par la liaison):

<endpoint address="calculator" binding="basicHttpBinding" contract="WCFService.ICalculatorService" /> 
<endpoint address="database" binding="basicHttpBinding" contract="WCFService.IDatabaseService" /> 

<endpoint address="calculator" binding="netNamedPipeBinding" contract="WCFService.ICalculatorService" /> 
<endpoint address="database" binding="netNamedPipeBinding" contract="WCFService.IDatabaseService" /> 
+0

Merci, cela aide beaucoup. – Barg