https://blog.csdn.net/qq_43544461/article/details/130768314
SOAP协议
SOAP(Simple Object Accrss Protocol,简单对象访问协议)是一种简单的基于XML的协议,可以使应用程序在分散或分布式的环境中通过HTTP来交换信息。SOAP是Web Service的通信协议,SOAP提供了标准的RPC方法来调用Web Service以请求/响应模式运行。
RPC(Remote Procedure Call)是一种远程过程调用方法,其将函数调用封装成网络消息发送给服务端,服务端响应消息后返回计算结果给客户端。类似于本地函数调用,但是在网络环境下RPC更适合执行异地调用,实现分布式系统的高效通信。缺点是接口的修改会影响到客户端和服务端的共同协作,需要进行版本控制,即接口修改后要同步更新引用。
因此,仅从调用接口一方的角度来看,webservice会比webapi在发送请求和接收数据上更简单一些。webservice接口调用更像是引入了一个依赖,直接使用其中的类和方法即可(即RPC方法的原理);而webapi接口调用则像是搭建了个postman,需要自己组建发送http请求的内容,再将返回的数据映射到实体类。
dll类库部分
1.添加服务引用。
2.将WebService接口地址https://localhost:44325/WebService1.asmx填入此处,或者填入wsdl文件的所在路径。
注意:在可以访问WebService接口地址时使用地址即可,在不可访问接口地址时(如内网部署),则使用wsdl文件。
3.在之前的测试类Class1中写测试方法show4。
前面提到SOAP协议基于RPC方法,类似于本地函数调用。而想要调用定义好的函数,首先需要将函数所在的类实例化为对象,因此需要先实例化一个SoapClient对象。即:
ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient();
4.将生成的dll类库项目引入其他项目,输出的结果如下图所示。(此处我生成了一个winform应用程序作为测试,直接写到main函数里,和上一篇是同一个)
5.注意:如果选择和我一样的方法通过dll类库项目调用接口,则需要在引用该类库的应用程序项目中修改App.config,因为类库项目不能读自己的config文件,而是读调用该类库的应用程序的config文件。
番外篇
使用实体类生成指定格式数据
webservice接口项目部分
1.添加一个实体类Result。
2.在WebService1.asmx.cs文件里添加一个实体类测试的方法GetValue。
3.启动后,在网页上输入ID和Name,即可得到XML格式的响应数据。
dll类库部分
1.更新服务引用。
2.在测试类Class1中增加测试方法show5。
3.还是和之前一样,放到winform应用程序的main函数中执行测试,输出结果如下图所示。
WebService网页在非本地计算机上没有测试按钮
1.打开已发布的 WebService 的 Web.config 文件。
2.在<system.web>配置节点中,增加如下配置:
<webServices>
<protocols>
<remove name="HttpGet" />
<remove name="HttpPost" />
<remove name="HttpPostLocalhost" />
</protocols>
</webServices>
3.上述的配置是微软官方文档给出的配置方法,但若要从本地计算机测试 HTTP-GET、HTTP-POST 或 HTTP-POST,需要删除上面增加的配置。
因此可以采用增加另一种配置:
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
<add name="HttpPostLocalhost" />
</protocols>
</webServices>
推测默认配置只允许本地计算机访问,第一种配置除本地计算机以外都能访问,而第二种配置是将任何计算机访问都视为本地计算机访问。
————————————————
版权声明:本文为CSDN博主「荆棘(★ StatTrak™)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43544461/article/details/130768314