通过前端Ajax访问WebService形式的接口
WebService是早期提供Web服务的一种形式(现在最新的方式是WebApi),其无关于编程语言,有java形式的WebService,也有C#形式的WebService。
我们在项目中,需要和其他外部系统进行接口对接时,常使用WebService或WebApi,这取决于对方提供服务接口的使用的是那种技术。
我们可以在本地模拟访问使用WebService形式编写的”WebService接口“(如何编写webservice demo以及在IIS上发布成服务请参看另外教程链接:https://blog.csdn.net/weixin_29431461/article/details/124615017)
需要注意的有几个易错点:

上面代码第16行要取消注释,否则会无法在客户端通过AJAX形式形式访问服务端的WebService。
另外需要注意的一点是:WebService项目的Web.config需要补充:支持访问形式配置、跨域问题解决配置,增加代码位置如图:

增加代码如下:
<webServices>
<protocols>
<add name= "HttpPost"/>
<add name= "HttpGet"/>
</protocols>
</webServices>
<!-- 解决跨域问题,追加以下代码:根据网络教程20230706-->
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*"/>
</customHeaders>
</httpProtocol>
</system.webServer>
之后,对WebService项目源码进行发布,然后利用IIS进行部署。
发布成功后的形式为:

以上说明我们以WebService形式提供的”服务“已经操作完毕了,那么,如何去访问这个服务?
其实WebService接口和WebApi接口形式几乎一模一样,WebService构成形式是:http://ip:port/asmx文件名.asmx(要有后缀)/待访问方法名;WebApi构成形式是:http://ip:port/Controller名称/待访问方法
我们可以在浏览器输入如上地址,测试得到方法返回值形式:

回到上面的问题,假如把我们上面发布的程序假想成是外部系统,或是我们要对接的系统。根据他提供给我们的这个接口地址,我们如何访问他,并拿到我们想要的数据呢?
访问WebService形式的接口有两种形式(就我知道的):通过前端Ajax形式、通过客户端程序添加服务引用形式。
本文以下先讲解通过前端Ajax形式访问WebService接口:
(1)可先写一个粗略的html结构的页面
(2)写相关页面触发事件(比如Button点击事件、页面加载事件等)
(3)点击事件脚本写一段Ajax脚本,异步调用WebService接口 (Ajax异步调用请求的多种方法可参考(取第1种):https://www.itgh.cn/post/eajci2b5.html)
(4)引入jquery包(因为第3步的$.Ajax()方法用的是jquery的方法)
(5)前端调试、看关键数据
前端代码如下:

通过浏览器打开,按F12进入调试模式,可以看到响应的结果数据已经拿到且正确:

===================================================
我们上面所举的例子是通过WebService接口访问的无参的函数,如果是有参的呢?
在WebService添加一个有参函数:

然后前端访问Ajax代码块,做些适应性修订:

通过前端页面调试,可以看到json格式返回的结果已拿到:



浙公网安备 33010602011771号