我在IIS6上托管了一个WCF服务,我正在使用.net framework 3.5。我拥有的网站是公共领域的,我的意思是任何人都可以从任何地方访问。
我的问题是,有没有办法隐藏我的WCF服务?我可以轻松查看源页面或确切知道页面后面的服务路径......
http://hostname.MyServiceName.svc?wsdl
,我该如何隐藏它?
答案 0 :(得分:11)
同意大卫认为只是“遮掩”你的服务不到解决方案的一半,你当然可以关闭
要做的是,请确保您的<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那样“停止”。