如何隐藏我的WCF服务

3

我有一个嵌入到Windows服务中的WCF服务。它绑定到本地主机,但也接受来自这种URL的连接 - "http://ip:port/ServiceName",如何隐藏它并只允许从本地主机连接。

这是我的服务配置

<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>
3个回答

6
要“隐藏”它,您需要关闭任何元数据交换,因此需要删除以下内容:
<serviceMetadata httpGetEnabled="true" /> 

从您的服务行为来看,您需要删除mex端点:

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

然而,这只是“掩盖”它。为了避免除本地主机以外的任何人调用 - 为什么不切换到“netNamedPipeBinding”,它是按设计“仅限于此计算机” - 没有外部调用者能够调用该端点。
否则,您将不得不检查调用者的IP地址,并基于该信息阻止它们 - 然而这可以很容易地被欺骗...

1

我会转换到 NetNamedPipeBinding - 这是本地专用的,但也避免了一些额外的层,并且不需要访问任何端口(非管理员默认情况下没有)。这可以在配置中使用 <netNamedPipeBinding> 元素完成。


0
如果你正在使用IIS进行主机托管,你可以将站点绑定从“*”改为“127.0.0.1”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接