ASP.net-web服务-只能通过本地主机访问

ASP.net-web服务-只能通过本地主机访问,asp.net,web-services,asmx,Asp.net,Web Services,Asmx,我在一个网站上工作,该网站在该网站的文件夹中公开了一组Web服务: services --- servicea.asmx --- serviceb.asmx 这些服务的设置允许与我们控制的其他站点进行一些互操作,并且这些站点都位于同一台服务器上 该站点使用基于asp.net表单的身份验证,但服务文件夹不受此限制,每个服务在调用方法时都会执行自己的身份验证,并检查访问权限是否仅来自本地地址,这样就可以了 但是,如果我从外部地址访问services/servicea.asmx,我仍然可以看到可用方

我在一个网站上工作,该网站在该网站的文件夹中公开了一组Web服务:

services
--- servicea.asmx
--- serviceb.asmx
这些服务的设置允许与我们控制的其他站点进行一些互操作,并且这些站点都位于同一台服务器上

该站点使用基于asp.net表单的身份验证,但服务文件夹不受此限制,每个服务在调用方法时都会执行自己的身份验证,并检查访问权限是否仅来自本地地址,这样就可以了


但是,如果我从外部地址访问services/servicea.asmx,我仍然可以看到可用方法的列表。我不能从外部地址有效地调用这些方法中的任何一个,这是应该的,但我不喜欢这样公开我们的内部API。是否有任何方法可以阻止asmx文件在框外访问时使用方法列表进行响应?

您应该能够将以下内容添加到web.config:

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

这将隐藏服务描述页面

有关更多信息,请参阅-注意,这也会阻止客户机生成WSDL代理类,因此它可能成为易于实现的真正障碍


隐藏方法名称并不能替代安全性,尽管如此,您可能需要考虑是否需要这样做。

您知道是否有一种方法可以在每个服务级别上执行此操作——我们还有一些其他的项目应该是外部可访问的。一个想法是尝试使用位置元素:-您可以尝试嵌套上面的块中的一个元素,但我在文档中找不到任何引用来说明这将起作用-抱歉。否则,您必须将每一个都放在它自己的虚拟目录或类似目录中,以便它们彼此有效地隔离。