- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
XML Web服务是一种用于在网络上发布、发现和使用应用程序组件的技术。它基于一系列标准和协议,如WSDL、SOAP、RDF和RSS。下面是一些相关的内容:
WSDL(Web服务描述语言):用于描述Web服务的基于XML的语言,定义了服务的接口、操作和消息格式 。
SOAP(简单对象访问协议):是一种基于XML的协议,用于在网络上交换结构化信息。它定义了消息的格式和传输规则,并被广泛用于Web服务之间的通信.
RDF(资源描述框架):是一种描述网络资源的框架,使用XML表示。它提供了一种统一的方式来描述资源的属性和关系,是万维网上语义网的基础之一.
RSS(真正简单的信息聚合):是一种用于发布网站内容的XML格式。它允许用户订阅网站的更新,并可以自动获取最新的内容。RSS文件通常用于博客、新闻网站等.
XML Web服务的特点包括:
自包含和自描述:Web服务能够描述自己的接口和功能,使其易于使用和集成到其他应用程序中.
基于开放协议:Web服务使用开放的协议和标准,如HTTP和SOAP,以确保不同平台和系统之间的互操作性.
可重用的组件:Web服务提供了可重用的应用程序组件,如货币转换、天气预报等,可以被其他应用程序调用和集成.
连接现有软件:Web服务可以连接现有的软件系统,并提供一种统一的方式来交换数据和调用功能.
在实际应用中,您可以通过创建和部署Web服务来实现各种功能和服务,从简单的数据转换到复杂的业务逻辑.
WSDL 是 Web Services Description Language 的缩写 WSDL 用于描述 Web 服务 WSDL 以 XML 形式编写 WSDL 文档 WSDL 文档描述了一个 Web 服务。它指定了服务的位置以及服务的方法,使用以下主要元素:
元素 描述 定义 Web 服务 使用的 ( XML Schema) 数据类型 为每个操作定义数据元素 描述可执行操作和所涉及的消息。 为每个端口类型定义协议和数据格式 。
WSDL 文档的主要结构如下:
`<definitions>`
`<types>`
数据类型定义........
`</types>`
`<message>`
传输的数据定义....
`</message>`
`<portType>`
一组操作......
`</portType>`
`<binding>`
协议和数据格式规范....
`</binding>`
`</definitions>`
WSDL 示例 。
`<message name="getTermRequest">`
`<part name="term" type="xs:string"/>`
`</message>`
`<message name="getTermResponse">`
`<part name="value" type="xs:string"/>`
`</message>`
`<portType name="glossaryTerms">`
`<operation name="getTerm">`
`<input message="getTermRequest"/>`
`<output message="getTermResponse"/>`
`</operation>`
`</portType>`
在此示例中,<portType> 元素将 "glossaryTerms" 定义为端口的名称,"getTerm" 定义为操作的名称.
"getTerm" 操作具有名为 "getTermRequest" 的输入消息和名为 "getTermResponse" 的输出消息.
<message> 元素定义了每个消息的部分和关联的数据类型.
<portType> 元素 <portType> 元素定义了一个 Web 服务,可以执行的操作以及所涉及的消息.
请求-响应类型是最常见的操作类型,但 WSDL 定义了四种类型:
类型 定义 One-way 该操作可以接收消息,但不会返回响应 Request-response 该操作可以接收请求,并将返回响应 Solicit-response 该操作可以发送请求,并将等待响应 Notification 该操作可以发送消息,但不会等待响应 WSDL 单向操作 单向操作示例:
`<message name="newTermValues">`
`<part name="term" type="xs:string"/>`
`<part name="value" type="xs:string"/>`
`</message>`
`<portType name="glossaryTerms">`
`<operation name="setTerm">`
`<input name="newTerm" message="newTermValues"/>`
`</operation>`
`</portType >`
在上面的示例中,portType "glossaryTerms" 定义了一个名为 "setTerm" 的单向操作.
"setTerm" 操作允许使用 "newTermValues" 消息输入新术语消息,其中包括输入参数 "term" 和 "value"。但是,没有为操作定义输出.
WSDL 请求-响应操作 请求-响应操作示例:
`<message name="getTermRequest">`
`<part name="term" type="xs:string"/>`
`</message>`
`<message name="getTermResponse">`
`<part name="value" type="xs:string"/>`
`</message>`
`<portType name="glossaryTerms">`
`<operation name="getTerm">`
`<input message="getTermRequest"/>`
`<output message="getTermResponse"/>`
`</operation>`
`</portType>`
在上面的示例中,portType "glossaryTerms" 定义了一个请求-响应操作,名为 "getTerm".
"getTerm" 操作需要名为 "getTermRequest" 的输入消息,其中包含名为 "term" 的参数,并将返回一个名为 "getTermResponse" 的输出消息,其中包含名为 "value" 的参数.
WSDL 绑定定义了 Web 服务 的消息格式和协议细节.
请求-响应操作示例:
`<message name="getTermRequest">`
`<part name="term" type="xs:string"/>`
`</message>`
`<message name="getTermResponse">`
`<part name="value" type="xs:string"/>`
`</message>`
`<portType name="glossaryTerms">`
`<operation name="getTerm">`
`<input message="getTermRequest"/>`
`<output message="getTermResponse"/>`
`</operation>`
`</portType>`
`<binding type="glossaryTerms" name="b1">`
`<soap:binding style="document"`
`transport="http://schemas.xmlsoap.org/soap/http" />`
`<operation>`
`<soap:operation soapAction="http://example.com/getTerm"/>`
`<input><soap:body use="literal"/></input>`
`<output><soap:body use="literal"/></output>`
`</operation>`
`</binding>`
binding 元素具有两个属性 - name 和 type.
name 属性(您可以使用任何名称)定义绑定的名称,type 属性指向绑定的端口,在本例中为 "glossaryTerms" 端口.
soap:binding 元素具有两个属性 - style 和 transport.
style 属性可以是 "rpc" 或 "document"。在这种情况下,我们使用 document。transport 属性定义要使用的 SOAP 协议。在这种情况下,我们使用 HTTP.
operation 元素定义了 portType 公开的每个操作.
对于每个操作,必须定义相应的 SOAP 动作。您还必须指定如何编码输入和输出。在本例中,我们使用 "literal".
SOAP 是 Simple Object Access Protocol 的缩写 SOAP 是一种应用通信协议 SOAP 是用于发送和接收消息的格式 SOAP 是平台无关的 SOAP 基于 XML 为什么使用 SOAP? Web 应用程序 能够在 互联网 上进行通信是非常重要的.
在 应用程序 之间进行通信的最佳方式是通过 HTTP,因为 HTTP 受到所有 互联网 浏览器和服务器的支持。SOAP 就是为了实现这一点而创建的.
SOAP 提供了一种在运行在不同操作系统、使用不同技术和编程语言的 应用程序 之间进行通信的方式.
SOAP 构建块 SOAP 消息是一个普通的 XML 文档,包含以下元素:
一个 Envelope 元素,用于标识 XML 文档作为 SOAP 消息 一个包含头信息的 Header 元素 一个包含调用和响应信息的 Body 元素 一个包含错误和状态信息的 Fault 元素 以上所有元素都声明在 SOAP 信封的默认命名空间中 。
语法规则 以下是一些重要的语法规则:
SOAP 消息必须使用 XML 进行编码 SOAP 消息必须使用 SOAP Envelope 命名空间 SOAP 消息不能包含 DTD 引用 SOAP 消息不能包含 XML 处理指令 。
该命名空间将 Envelope 定义为 SOAP Envelope.
如果使用了不同的命名空间,应用程序 将生成错误并丢弃消息.
encodingStyle 属性 encodingStyle 属性用于定义文档中使用的数据类型。该属性可以出现在任何 SOAP 元素上,并应用于该元素及其所有子元素.
SOAP 消息没有默认编码.
SOAP Header 元素 可选的 SOAP Header 元素包含关于 SOAP 消息的应用程序特定信息(如身份验证、支付等).
如果存在 Header 元素,则必须将其放在 Envelope 元素的第一个子元素位置.
注意:Header 元素的所有直接子元素必须是命名空间限定的.
SOAP 在默认命名空间中定义了三个属性。这些属性是:mustUnderstand、actor 和 encodingStyle.
SOAP Header 中定义的属性定义了接收者应该如何处理 SOAP 消息.
mustUnderstand 属性 SOAP mustUnderstand 属性可用于指示接收者是否必须处理头部条目.
如果将 mustUnderstand="1" 添加到 Header 元素的子元素中,表示处理 Header 的接收者必须识别该元素。如果接收者不识别该元素,则在处理 Header 时将失败.
语法 soap:mustUnderstand="0|1" 。
actor 属性 SOAP 消息可能通过沿着消息路径传递不同的端点从发送方传递到 。
接收方。然而,SOAP 消息的不是所有部分都可能是针对最终端点的,而是可能针对消息路径上的一个或多个端点.
SOAP actor 属性用于将 Header 元素定向到特定端点.
语法 soap:actor="URI" 。
encodingStyle 属性 encodingStyle 属性用于定义文档中使用的数据类型。该属性可以出现在任何 SOAP 元素上,它将应用于该元素的内容及其所有子元素.
SOAP 消息没有默认编码.
语法 soap:encodingStyle="URI" 。
SOAP Body 元素 必需的 SOAP Body 元素包含了消息的实际 SOAP 消息,用于消息的最终端点.
SOAP Body 元素的直接子元素可以是命名空间限定的.
示例 。
<soap:Envelope 。
</m:GetPrice> </soap:Body> 。
</soap:Envelope> 上面的示例请求了苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序特定的元素。它们不属于 SOAP 命名空间 。
SOAP Fault 元素 可选的 SOAP Fault 元素用于指示错误消息.
SOAP Fault 元素包含了 SOAP 消息的错误和状态信息.
如果存在 Fault 元素,它必须作为 Body 元素的子元素出现。Fault 元素只能在 SOAP 消息中出现一次.
SOAP Fault 元素具有以下子元素:
子元素 描述 <faultcode> 用于标识错误的代码 <faultstring> 错误的人类可读的解释 <faultactor> 导致错误发生的信息 <detail> 包含与 Body 元素相关的应用程序特定错误信息 。
SOAP 错误代码 当描述错误时,faultcode 元素中必须使用以下定义的 faultcode 值:
错误 描述 VersionMismatch 在 SOAP Envelope 元素的命名空间中找到无效的命名空间 MustUnderstand Header 元素的立即子元素,mustUnderstand 属性设置为 "1",未被理解 Client 消息格式不正确或包含不正确的信息 Server 服务器出现问题,因此消息无法继续进行 。
HTTP 协议 HTTP 通过 TCP/IP 进行通信。HTTP 客户端使用 TCP 连接到 HTTP 服务器。建立连接后,客户端可以向服务器发送 HTTP 请求消息:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
然后,服务器处理请求并将 HTTP 响应发送回客户端。响应包含指示请求状态的状态代码:
200 OK
Content-Type: text/plain
Content-Length: 200
在上面的示例中,服务器返回了状态代码 200。这是 HTTP 的标准成功代码.
如果服务器无法解码请求,则可能返回以下内容:
400 Bad Request
Content-Length: 0
SOAP 规范定义了 SOAP 消息的结构,但未定义它们如何交换。这一空白由所谓的 "SOAP 绑定" 填补。SOAP 绑定是允许使用传输协议有效地交换 SOAP 消息的机制.
大多数 SOAP 实现提供了常见传输协议的绑定,例如 HTTP 或 SMTP.
HTTP 是同步的并且被广泛使用。SOAP HTTP 请求至少指定了两个 HTTP 头部:Content-Type 和 Content-Length.
SMTP 是异步的,通常在最后一种情况或特殊情况下使用.
Java 的 SOAP 实现通常为 JMS(Java 消息系统)协议提供了特定的绑定.
Content-Type 。
SOAP 请求和响应的 Content-Type 头部定义了消息的 MIME 类型以及用于请求或响应的 XML 主体的字符编码(可选).
Content-Type: MIMEType; charset=character-encoding
示例 。
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length 。
SOAP 请求和响应的 Content-Length 头部指定了请求或响应的主体中的字节数.
Content-Length: bytes
示例 。
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送 。
看完如果觉得有帮助,欢迎点赞、收藏、关注 。
最后此篇关于XMLWeb服务技术解析:WSDL与SOAP原理、应用案例一览的文章就讲到这里了,如果你想了解更多关于XMLWeb服务技术解析:WSDL与SOAP原理、应用案例一览的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在通过 labrepl 工作,我看到了一些遵循此模式的代码: ;; Pattern (apply #(apply f %&) coll) ;; Concrete example user=> (a
我从未向应用商店提交过应用,但我会在不久的将来提交。 到目前为止,我对为 iPhone 而非 iPad 进行设计感到很自在。 我了解,通过将通用PAID 应用放到应用商店,客户只需支付一次就可以同时使
我有一个应用程序,它使用不同的 Facebook 应用程序(2 个不同的 AppID)在 Facebook 上发布并显示它是“通过 iPhone”/“通过 iPad”。 当 Facebook 应用程序
我有一个要求,我们必须通过将网站源文件保存在本地 iOS 应用程序中来在 iOS 应用程序 Webview 中运行网站。 Angular 需要服务器来运行应用程序,但由于我们将文件保存在本地,我们无法
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
假设我有一个安装在用户设备上的 Android 应用程序 A,我的应用程序有一个 AppWidget,我们可以让其他 Android 开发人员在其中以每次安装成本为基础发布他们的应用程序推广广告。因此
Secrets of the JavaScript Ninja中有一个例子它提供了以下代码来绕过 JavaScript 的 Math.min() 函数,该函数需要一个可变长度列表。 Example:
当我分别将数组和对象传递给 function.apply() 时,我得到 NaN 的 o/p,但是当我传递对象和数组时,我得到一个数字。为什么会发生这种情况? 由于数组也被视为对象,为什么我无法使用它
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章ASP转换格林威治时间函数DateDiff()应用由作者收集整理,如果你
我正在将列表传递给 map并且想要返回一个带有合并名称的 data.frame 对象。 例如: library(tidyverse) library(broom) mtcars %>% spl
我有一个非常基本的问题,但我不知道如何实现它:我有一个返回数据框,其中每个工具的返回值是按行排列的: tmp<-as.data.frame(t(data.frame(a=rnorm(250,0,1)
我正在使用我的 FB 应用创建群组并邀请用户加入我的应用群组,第一次一切正常。当我尝试创建另一个组时,出现以下错误: {"(OAuthException - #4009) (#4009) 在有更多用户
我们正在开发一款类似于“会说话的本”应用程序的 child 应用程序。它包含大量用于交互式动画的 JPEG 图像序列。 问题是动画在 iPad Air 上播放正常,但在 iPad 2 上播放缓慢或滞后
我关注 clojure 一段时间了,它的一些功能非常令人兴奋(持久数据结构、函数式方法、不可变状态)。然而,由于我仍在学习,我想了解如何在实际场景中应用,证明其好处,然后演化并应用于更复杂的问题。即,
我开发了一个仅使用挪威语的应用程序。该应用程序不使用本地化,因为它应该仅以一种语言(挪威语)显示。但是,我已在 Info.plist 文件中将“本地化 native 开发区域”设置为“no”。我还使用
读完 Anthony's response 后上a style-related parser question ,我试图说服自己编写单体解析器仍然可以相当紧凑。 所以而不是 reference ::
multicore 库中是否有类似 sapply 的东西?还是我必须 unlist(mclapply(..)) 才能实现这一点? 如果它不存在:推理是什么? 提前致谢,如果这是一个愚蠢的问题,我们深表
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink() 和 file.show()。例如: y <- rnorm(100); x <- r
我有一个如下所示的 spring mvc Controller @RequestMapping(value="/new", method=RequestMethod.POST) public Stri
我正在阅读 StructureMap关于依赖注入(inject),首先有两部分初始化映射,具体类类型的接口(interface),另一部分只是实例化(请求实例)。 第一部分需要配置和设置,这是在 Bo
我是一名优秀的程序员,十分优秀!