什么是web services?
web service也被称为web服务,他是一种跨编程语言和操作系统平台的远程调用技术,web service采用的是标准的soap(简单对象访问)协议进行传输的,soap协议是属于w3c的标准,并且soap协议是基于http应用层协议输出xml格式的数据,web services采用了wsdl作为描述语言,也就是说明书,并且w3c为web service制定了一套传输数据类型,使用xml进行描述,即XSD,任何语言写的web services接口再发送数据的时候都要转成web services标准的XSD发送
SOAP的具体解释:
SOAP(Simple Object Access Protocol)是一种用于在网络中进行交互的协议。它是一种基于XML的协议,用于在不同应用程序之间进行通信和数据交换。SOAP主要用于Web服务的实现,通过在网络上交换结构化数据,允许应用程序通过远程过程调用(RPC)进行通信。
以下是SOAP协议的一些关键特点和组成部分:
- 基于XML
:SOAP使用XML格式作为消息的载体,以便跨平台和跨语言的交互。SOAP消息由SOAP Envelope、Header和Body组成,使用XML来定义消息的结构和内容。
- 普遍性
:由于SOAP使用XML作为消息格式,在几乎所有类型的网络传输协议上都可以使用,如HTTP、SMTP、TCP等。
- 协议中立性
:SOAP可以在不同的传输协议上运行,例如HTTP、SMTP等,因此不依赖于任何特定的传输协议。
- 支持多种编程语言
:SOAP可以通过使用不同语言和工具进行实现和调用,因此允许不同平台和技术栈之间的互操作性。
- 支持远程过程调用(RPC)
:SOAP支持远程过程调用(RPC),允许客户端应用程序通过在远程服务器上执行方法或操作来请求数据或执行任务。
- 安全性支持
:SOAP提供了一些安全性机制,如通过HTTPS进行加密传输,支持安全认证和消息签名等。
- 扩展性和灵活性
:SOAP协议拥有良好的扩展性和灵活性,可以通过定义自定义的消息头和命名空间来满足各种应用需求。
使用SOAP协议进行通信时,通常的步骤包括:
- 定义SOAP消息的结构和内容,包括消息的大纲(envelope)、头(header)和体(body)等部分。
- 使用SOAP协议将消息封装成XML格式并进行编码。
- 通过网络将编码后的消息发送到接收方的服务端。
- 接收方的服务端根据SOAP标准解析消息,并根据消息内容执行相应的操作。
- 服务端处理完请求后,将结果封装成SOAP消息返回给请求方。
- 请求方的客户端解析响应消息,并提取结果进行后续处理。
web services的核心组件
web service的作用:
实现不同平台、不同系统、不同语言之间的通信访问和远程调用
两者的区别:
webapi多用于http请求的服务应用,比如说服务端或者需要提供的第三方API的服务的场景下
webservice也可以应用于webapi所在的场景,一般作为内部服务的使用web api是对外的服务,web serverice是对内的服务
希望使用开源框架,关键时候可以自己调试或者自定义一下框架
指向发布一些简单的http服务,不行使用相对复杂的wcf配置
webservice的使用过程:
1.创建webservice服务:在web程序中,进行添加新建项目webservice服务
建立好服务之后,在项目中会自动生成一个webservice.asmx的文件,在这个文件里面可以写一系列的方法(接口),如果想要其他程序能调用到该接口,就必须在这些接口的上面进行【webmethed】这个标志,否则其他的程序将无法访问到这个接口,即使他在这个webservice的服务当中:
一个程序想要访问该程序中的接口的话,有两种方式:
A:用添加引用的方式进行调用接口:
在想要调用接口的程序中进行添加引用服务
添加成功之后,在此程序中会生成一个链接成功的文件:然后新建一个页面然后再页面的cs页面进行实际的调用:
对应的cs的界面:
B:通过ajax请求的方式进行调用另一个程序中的接口
1.创建webservice服务:在web程序中,进行添加新建项目webservice服务
建立好服务之后,在项目中会自动生成一个webservice.asmx的文件,在这个文件里面可以写一系列的方法(接口),如果想要其他程序能调用到该接口,就必须在这些接口的上面进行【webmethed】这个标志,否则其他的程序将无法访问到这个接口,即使他在这个webservice的服务当中:
2.1 方式一:在想要调用接口的程序中新建一个web窗体的页面,然后引入jquery的文件,然后再发送ajax请求,注意传递的属性和参数以及数据格式的设置:get
当设置好这些之后,两个程序运行之后后台可能会报错误:因为没有配置webservice的文件,这是需要进行配置文件web.config【配置的是写有接口服务的web.config的文件】
报错信息:值得就是没有权限进行访问该接口,因为接口的程序中的webconfig文件中没有配置允许跨域的操作,所以需要对接口中的程序(webconfig)进行允许跨域访问的配置,再配置期间注意节点的正确位置
<!--配置允许远程调用--> <webServices> <protocols> <add name="HttpPost" /> <add name="HttpGet" /> </protocols> </webServices>
<!--配置允许远程调用-->
<webServices>
<protocols>
<add name="HttpPost" />
<add name="HttpGet" />
</protocols>
</webServices>
<system.webServer>
<!--配置为列出此目录的内容-->
<directoryBrowse enabled="true" ></directoryBrowse>
<!--配置允许跨越请求-->
<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.serviceModel>
配置好接口的web.config文件之后,回到调用服务的程序中,然后将两个程序全部进行重新生成,然后进行运行,访问服务的程序就可以进行跨域操作进行请求对应地址的接口
2.2 方式二:在想要调用接口的程序中新建一个web窗体的页面,然后引入jquery的文件,然后再发送ajax请求,注意传递的属性和参数以及数据格式的设置:post
注意:如果配置完以上这些,用ajax调用的时候还存在报错信息的话,就需要再接口的程序中检查这行代码是否取消注释
同源策略:
A.什么叫同源策略:
出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。
也就是说在一个Web网站中,用Ajax只能访问本网站中的一般处理程序或者WebAPI功能,而不能访问其他网站的一般处理程序和WebAPI功能(一个程序中只能访问本程序中的一般处理程序等,不能访问另一个程序)
怎样判断两个程序之间能否直接通信?
协议(http/https) 域名(.com之前) 端口(:8000)(默认的端口号是8080)
协议、域名和端口号都相同的情况下,才能直接通信,如果其中任意一点不同的话,都不能直接通信,需要做跨域操作,也就是说,两个程序中,只有域名、协议和端口号都一样的情况下才能直接访问对方的一般处理程序/接口等,任意一点不相同时,需要访问另一个程序中的方法接口时,都需要进行跨域操作。