备忘:.net WebServices 禁用浏览器访问与禁用wsdl生成

很多情况下, 开发webservices 是需要本地浏览器调试,处于安全考虑生产环境不允许访问,也不允许访问wsdl文档。

首先:

禁用或启用浏览器访问,get、post方式

web.config文件内会有以下节点,注释掉get和post,就不可使用浏览器调试了,仅能使用soap进行正常访问。

<system.web>
    <webServices>
      <protocols>
        <add name="HttpSoap" />
        <!--<add name="HttpPost" />
        <add name="HttpGet" />-->
        <add name="Documentation" />
      </protocols>
    </webServices>

注释get与post后,再次访问 提示:”测试窗体只能用于来自本地计算机的请求“;但是还是能够看到wsdl文档,能够看到请求体与响应体,这些我们也不想暴露在外边。

需要在webServer节点内添加以下节点,来阻止wsdl生成。再次访问就会报500错误了,看了官方文档,应该是可以显示其他页面,不用报500错误,相对友好。(我们没那么多需求,就不继续研究了)

<system.web>   
<webServices>   
<wsdlHelpGenerator href="MyDocumentation.aspx"/>   
</webServices>   

本以为到此就结束了,突然发现接口也是500,也报错了,再次查询发现这个方法行不通,看了下文档没看明白。

再次查询解决方案得到了相对友好的解决方案:在<protocols> 节点下增加<remove name="Documentation"/> 并注释<add name="Documentation" />

    <system.web>
    <webServices>
      <protocols>
        <add name="HttpSoap" />
 <!--<add name="HttpPost" />
        <add name="HttpGet" />
        <add name="Documentation" />-->
<remove name="Documentation"/>   
      </protocols>
    </webServices>

再次访问asmx文档,浏览器响应404错误,至此基本解决了接口暴露问题。

404错误不太友好,配合站点加了一个自定义的错误页,相对友好一点。system.web节点下增加<customErrors>节点

<system.web>
<customErrors defaultRedirect="error.html" mode="RemoteOnly">
 </customErrors>
</system.web>

官方文档:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2008/ms242476(v=vs.90)

感谢搜索到的文章:https://developer.51cto.com/art/200908/142437.htm

仅供参考,内容中会引用部分博友的文章。(侵删)
原文地址:https://www.cnblogs.com/zeran/p/13994304.html