Web Service
web service 是一种跨编程语言 和 跨操作系统 平台的远程调用技术 就是一种数据接口
采用了标准的 SOAP 协议传输 遵循w3c的标准 xml传输
不同数据,不同服务 ,进行数据交互 的web 服务接口
特点
- 基于 SOAP 协议的,传输数据是XML格式
- 只支持 http 协议
- 不是开源的,但是可以被任意一个了解xml的人使用
- 只能部署在iis 服务器上
核心组件
xml 和html | |
---|---|
SOAP | 简单对象访问协议 |
WSDl | web service描述语言【是w3c基于xml 给web service 提供的特有的xml格式】 |
UDDI | 统一描述、发现和继承协议 |
soap 简单对象访问协议
【相当于http+xml】
wsdl
相当于Web Service 说明文档
链接地址后拼接?wsdl 可以查看xml文件
wsdl 文档 的基础标签节点
- :服务视图
- :消息格式的定义
- 可执行方法,以及描述信息
- 定义参数的相关信息的定义
- 节点:全部使用的数据类型
uddi
独立的框架 统一描述
调用web service
创建web service
创建的方法 要对外调用的话 需要添加[WebMethod] 特性
服务引用
添加web service 成功后
使用
首先要拿到服务的对象,然后通过对象调用方法
//调用 web service 接口 1.
ServiceReference1.WebService1SoapClient sesoap= new ServiceReference1.WebService1SoapClient();
string ss =sesoap.GetData();
var slist=JsonConvert.DeserializeObject(sesoap.GetData());
如果web service 中添加了新的 处理,需要更新一下服务引用
** 一定 要 开启 web service **
ajax 调用
get请求
xml和json 取决于 接口方法返回值
//ajax get方式的简写
$.get("https://localhost:44323/WebService1.asmx/GetData", function (res) {
//处理xml数据
res = JSON.parse(res.getElementsByTagName('string')[0].innerHTML)
console.log(res)
}, "xml")
post 请求
数据 json格式为 object,微软框架默认的是{“d”:“后台返回数据”} d才是后台返回的数据
//调用json格式数据
//post 请求
$.ajax({
type:"post",
url:"https://localhost:44323/WebService1.asmx/GetDatajson",
data:"{total:30}",
contentType:"application/json",
dataType: "json",
success: function (res) {
console.log(JSON.parse(res.d))
console.log(res)
}
})
注:
接口端 类上的需要 添加此行注解【创建web service 时自动生成 一般自动注释】
在调用接口时、使用web service任何操作时 都需要保证web service 的运行 否则无法获取任何链接
跨域
同源和不同源
协议 域名 端口 都相同被称为同源 任意不同 就会产生跨域问题
http://www.a.com:8000
协议[http] 域名[www.a.com] 端口[:8000] 未写端口号默认 8080
跨域问题处理、需要在其他机器上访问,需要在 web.config 中进行配置 因为是接口进行跨域,所以配置在接口的web.config中
<system.webServer>
<!--配置为列出此目录的内容-->
<directoryBrowse enabled="true"/>
<!--允许进行跨域请求-->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="*"/>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
</customHeaders>
</httpProtocol>
</system.webServer>
<system.web>
<!--允许远程调用web service-->
<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
</protocols>
</webServices>
</system.web>