前言
虽然webservice技术已经比较老了,但是还是有他应用的场景.
WebService介绍
- webservice是基于http的soap协议传输数据 webservice=soap=http+xml,webservice协议就是有http+xml组成的,其中xml中会用到wsdl,wsdl是描述语言xml中的一种格式。
几个基本概念: - SOAP:Simple Object AccessProtocol 简单对象访问协议。基于XML和HTTP
- WSDL Web Services Description Language Web 服务描述语言。服务所提供的操作 如何访问服务 服务位于何处(通过 URL 来确定就 OK 了)
调用WebService的集中方式
1. Add reference
这个比较简单,基操,就不详述了
2. 生成调用cs文件
使用命令
wsdl /n:命名空间 /out: 路径\文件名称.cs webservice地址?wsdl
将生成好的文件包括到项目中
var WebService = new 类名Service();
WebService.方法名 就可以调用
3. 手写SOAP发送http请求
SOAP协议整体比较简单
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
- 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
- 可选的 Header 元素,包含头部信息
- 必需的 Body元素,包含所有的调用和响应信息
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
我们在实际汇总可以用Wizdler 插件或者SOAP UI 里面生成
本文以Wizdler 插件为例
以天气这个接口为例子:
地址为 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
会自动生成SOAP协议的XML
接下来可以拷到PostMan 中进行测试
--本例中用的是Rectsharp,详解可以看另外一个博客
var client = new RestClient("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/soap+xml");
request.AddParameter("application/soap+xml", "<Envelope xmlns=\"http://www.w3.org/2003/05/soap-envelope\">\r\n <Body>\r\n <getSupportCity xmlns=\"http://WebXml.com.cn/\">\r\n <byProvinceName>山东</byProvinceName>\r\n </getSupportCity>\r\n </Body>\r\n</Envelope>", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
持续更新中