很多情况下, 开发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