2010-11-24 29 views
3

J'ai un service WCF intégré dans le service Windows. Il est lié à localhost mais accepte également la connexion de ce type d'URL - "http: // ip: port/ServiceName", comment puis-je le cacher aux autres et autoriser la connexion uniquement depuis localhost.Comment masquer mon service WCF

Voici ma configuration de service

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="Test.Service.ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service behaviorConfiguration="Test.Service.ServiceBehavior" name="Test.Service.TestService"> 
     <endpoint address="localhost" binding="wsHttpBinding" contract="Test.Service.IService"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
       <add baseAddress="http://localhost:8732/MyService/service" /> 
     </baseAddresses> 
     </host> 
    </service> 
</services> 
</system.serviceModel> 

Répondre

6

« cacher », vous devez désactiver tout échange de données méta, de sorte que vous devez supprimer:

<serviceMetadata httpGetEnabled="true" /> 

de vos comportements de service, et vous devez supprimer le point de terminaison MEX:

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 

Cependant, ceci ne fait que "l'obscurcir". Pour éviter que quelqu'un d'autre, mais localhost appeler - pourquoi ne pas passer à la netNamedPipeBinding, qui est par la conception "sur cette machine seulement" - aucun appelant extérieur ne peut appeler dans ce point de terminaison.

Sinon, vous auriez à vérifier l'adresse IP de l'appelant et les bloquer en fonction de cette information - qui peut cependant être usurpée assez facilement ....

+0

merci beaucoup pour l'aide) – mironych

1

je passer à NetNamedPipeBinding - c'est intrinsèquement local uniquement, mais évite aussi quelques couches supplémentaires, et ne nécessite pas l'accès à tous les ports (qui non les administrateurs n'ont pas par défaut). Cela peut être fait dans config en utilisant l'élément <netNamedPipeBinding>.

0

Si vous hébergez dans IIS, vous pouvez simplement changez les liens de site de "*" à "127.0.0.1"