隐藏我的WCF服务?

Nic*_*ahn 4 wcf wcf-binding svc

我有一个在IIS6上托管的WCF服务,我正在使用.net framework 3.5.我拥有的网站是公共领域的,我的意思是任何人都可以从任何地方访问.

我的问题是,有没有办法隐藏我的WCF服务?我可以轻松查看源页面或确切知道页面后面的服务路径...

http://hostname.MyServiceName.svc?wsdl,我怎么能隐藏它?

mar*_*c_s 11

同意大卫只是"掩盖"你的服务不到解决方案的一半,你当然可以关闭

  • 服务元数据
  • 您的WSDL文件的http可用性

要做的是,确保您的<service>标记没有引用<serviceBehavior>包含<serviceMetadata>标记的标记.

所以这公开服务元数据(包括HTTP上的WSDL):

<behaviors>
   <serviceBehaviors>
      <behavior name="default">
         <serviceMetadata httpGetEnabled="True" />
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="default">
      ...
   </service>
</services>
Run Code Online (Sandbox Code Playgroud)

虽然这不会暴露任何服务元数据(观察删除<serviceMetadata>标签):

<behaviors>
   <serviceBehaviors>
      <behavior name="nometadata">
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="nometadata">
      ...
   </service>
</services>
Run Code Online (Sandbox Code Playgroud)

删除任何服务元数据时,您将无法Add Service Reference在Visual Studio(或任何其他开发系统的等效项)中执行此操作 - 该服务不会告诉您可用的内容 - 您必须知道一些另一种方式.


3Da*_*ave 5

这可以追溯到旧的"通过默默无闻的安全"辩论.隐藏您的服务并不是保护它的好方法.研究使用SSL和真正的身份验证方法,而不是仅仅试图"隐藏"它.

此外,更直接地回答您的问题:如果浏览器知道您的服务地址(并且必须为了让您的页面通过JavaScript或您拥有的内容来调用它),那么任何人都可以轻松找到它.无论您尝试在页面源中隐藏URL多少,都可以通过监视Fiddler或Firebug中的HTTP事务来查看服务地址和请求的格式/内容.