ASP.net - Web服务 - 仅在本地主机

问题描述:

我对暴露在站点文件夹内的一组web服务的现场工作访问:ASP.net - Web服务 - 仅在本地主机

services 
--- servicea.asmx 
--- serviceb.asmx 

这些服务设置为允许一些互操作性我们控制的其他网站,并且这些网站都位于同一台服务器上。

该网站使用基于asp.net表单的身份验证,但services文件夹已被豁免,并且每个服务在调用方法时执行它自己的身份验证,并检查他是否仅从本地地址访问,精细。

但是,如果我从外部地址访问services/servicea.asmx,我仍然可以看到可用方法的列表。我无法有效地从外部地址调用任何这些方法,这是应该的,但我不喜欢这样暴露我们的内部API。有什么方法可以阻止asmx文件在方框列表中访问时访问方法列表吗?

您应该能够添加以下到你的web.config:

<system.web.services> 
    <protocols> 
     <remove name="Documentation"/> 
    </protocols> 
</system.web.services> 

本应隐藏服务描述页面。

有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/b2c0ew36%28v=vs.100%29.aspx - 请注意,这也会阻止客户端生成WSDL代理类,因此它可能成为实现简便的真正障碍。

隐藏方法名称不能代替安全性,但您可能需要考虑是否需要执行此操作。

+0

您是否知道是否有办法在每个服务级别上执行此操作 - 我们还有一些其他应可从外部访问的项目。 – Paddy 2012-03-16 10:56:13

+0

一个想法是尝试使用位置元素:http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx - 您可以尝试将上面的块嵌套在元素,但我找不到任何文档中的参考,说这将工作 - 对不起。否则,您必须将每个虚拟目录放入其自己的虚拟目录或类似目录中,以便将它们有效地彼此隔离。 – dash 2012-03-16 11:41:08