2010-11-24 40 views
3

我有一個嵌入到Windows服務的WCF服務。它綁定到本地主機,但它也接受來自這種URL的連接 - 「http:// ip:port/ServiceName」,我怎樣才能將它隱藏起來,並且只允許從本地主機連接。如何隱藏我的WCF服務

這裏是我的服務配置

<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> 

回答

6

「隱藏」,你需要關閉任何元數據交換,所以你需要刪除:

<serviceMetadata httpGetEnabled="true" /> 

從您的服務行爲,你需要刪除MEX終結:

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

但是,這只是「模糊」它。爲了避免其他人,但localhost打電話 - 爲什麼不切換到netNamedPipeBinding,這是設計「只在這臺機器上」 - 外部呼叫者無法呼叫到該端點。

否則,你就必須要檢查調用者的IP地址,並阻止他們根據這些信息 - 但它可以很容易地欺騙....

+0

非常感謝您的幫助) – mironych 2010-11-24 11:53:48

1

我會切換到NetNamedPipeBinding - 這僅本地本質,同時也避免了一些額外的層,並且不需要訪問任何端口(其中非管理員沒有默認)。這可以在配置中使用<netNamedPipeBinding>元素完成。

0

如果你在IIS託管,你可以只將網站綁定從「*」更改爲「127.0.0.1」