隐藏我的WCF服务?

时间:2010-12-05 19:58:31

标签: wcf wcf-binding svc

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

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

http://hostname.MyServiceName.svc?wsdl,我该如何隐藏它?

3 个答案:

答案 0 :(得分: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>

虽然这会不公开任何服务元数据(请注意删除<serviceMetadata>标记):

<behaviors>
   <serviceBehaviors>
      <behavior name="nometadata">
         <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
</serviceBehaviors>
<behaviors>
<services>
   <service name="IYourService" behaviorConfiguration="nometadata">
      ...
   </service>
</services>

删除任何服务元数据时,您将无法再从Visual Studio(或任何其他开发系统的等效项)中执行Add Service Reference - 该服务不会告诉您什么可用 - 您必须了解其他方式。

答案 1 :(得分:5)

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

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

答案 2 :(得分:-1)

为什么要隐藏您的服务?有人发现这是一个真正的问题,还是你只是想保护自己?

有许多保护自己的策略......但如果它只是一个随意的“不想让人们使用我的服务”那么只是偶尔改变API。没有什么能像随机变化的API那样“停止”。