`

深入浅出WS-Addressing(转)

阅读更多

1. 为什么需要 WS-Addressing

为什么会需要 WS-Addressing ?在出现 WS-Addressing 之前,我们都是如何让服务之间互相得到数据的呢?

当然,我们是通过 http 数据包来定义的,一段 http 数据包里包括了数据包发送的目的地,发送过去的动作,发送的格式等等,这个数据包直接通过复杂的网络,发送过去,让接受方接受。 ( 具体请参照下图中的红色加粗字体 )

---[HTTP request - http://localhost:80/jaxws-wsaddressing_replyto/addnumbers]---
Content-length: 627
Content-type: text/xml;charset=utf-8
Accept: text/xml, multipart/related
Soapaction: "http://server.wsaddressing_replyto/AddNumbersImpl/addNumbersRequest"

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S=http://schemas.xmlsoap.org/soap/envelope /
	xmlns:wsa="http://www.w3.org/2005/08/addressing">
	<S:Header>
		<To xmlns="http://www.w3.org/2005/08/addressing">
			http://localhost:80/jaxws-wsaddressing_replyto/addnumbers
   		</To>
		<Action xmlns="http://www.w3.org/2005/08/addressing">
			http://server.wsaddressing_replyto/AddNumbersImpl/addNumbersRequest
		</Action>
	</S:Header>
	<S:Body>
		<ns2:addNumbers xmlns:ns2="http://server.wsaddressing_replyto/">
			<arg0>10</arg0>
			<arg1>20</arg1>
		</ns2:addNumbers>
	</S:Body>
</S:Envelope>

--------------------





但是,这种处理方法,对应简单的点到点数据传输是可以的,但是一旦遇到了异步的,分布式的系统的话,这样的解决方法就不行了,具体问题如下:

1)如果在异步传输下,服务 A 发送数据给服务 B 但是服务 B 的正常响应,非正常响应,错误 响应都是不同的,那么怎么在 http 数据包来定义呢?

2) 如果服务 A 发送数据给服务 B ,但是调用的是服务 B 的不同版本。比如服务 B 有三个不同的版本,需要通过调用时候传递的参数来决定调用的版本。那么简单的 http 数据包定义能应付吗?

为了解决这些技术问题, IBM,MS,BEA 等公司联合推出了 WS- Addressing 协议。

WS- Addressing 协议的最新官方文档如下:

http://www.w3.org/Submission/ws-addressing/


WS- Addressing 协议最简单的定义就是,在 SOAP 消息的 Header 中,用一系列 XML 标签定义了服务传递中间的目的地, Action ReplyTo Fault 处理等等传输层细节。

---[HTTP request -
http://localhost:80/jaxws-wsaddressing_replyto/addnumbers]---

Content-length: 627

Content-type: text/xml;charset=utf-8

Accept: text/xml,
multipart/related

Soapaction:
"http://server.wsaddressing_replyto/AddNumbersImpl/addNumbersRequest"

<?xml version='1.0' encoding='UTF-8'?>

<S:Envelope xmlns:S=http://schemas.xmlsoap.org/soap/envelope /
	xmlns:wsa="http://www.w3.org/2005/08/addressing">
	<S:Header>
		<wsa:To>
			http://localhost:80/jaxws-wsaddressing_replyto/addnumbers
		</wsa:To>
		
		<wsa:ReplyTo>
			<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
		</wsa:ReplyTo>
		
		<wsa:FaultTo>
			<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
		</wsa:FaultTo>

		<wsa:MessageID>uuid:71dc765e-1c1f-4fff-ac77-1681eb416005</wsa:MessageID>

		<To xmlns="http://www.w3.org/2005/08/addressing">
			http://localhost:80/jaxws-wsaddressing_replyto/addnumbers
	





2. WS-Addressing 是如何传输数据的

我们在上面谈了,为什么需要 WS-Addressing 协议。下面我们来谈一谈 WS-Addressing 是如何传输数据的

WS-Addressing 协议通过在 SOAP 消息的 header 中加入数据的方式来传送数据。具体的传送方法有如下两种:

1)Endpoint Reference

2)Message Addressing Properties


我们可以打个最简单的比方来解释上面两种技术,如果南京的小李要寄信给上海的小王,那么 Message Addressing Properties 就好像信封的格式 ( 比如什么地方写邮编,什么地方写地址 ) ,而 Endpoint Reference 就好像信封上面具体的邮编,地址的内容


<s:Envelope xmlns:s="..." xmlns:wsa="...">

<s:Header>

	<wsa:Action>http://skonnard.com/SubmitClaim</wsa:Action>

	<wsa:To>http://skonnard.com/Claims/Submit.asmx</wsa:To>

	<wsa:From>

		<wsa:Address>http://skonnard.com/main/sub.asmx</wsa:Address>

		<wsa:ReferenceProperties>

			<c:PatientProfile>123456</c:PatientProfile>

			<c:CarrierID>987654</c:CarrierID>

		</wsa:ReferenceProperties>

	</wsa:From>

	<wsa:ReplyTo>

		<wsa:Address>http://skonnard.com/resp/resp.asmx</wsa:Address>

		<wsa:ReferenceProperties>

			<c:PatientProfile>123456</c:PatientProfile>

			<c:CarrierID>987654</c:CarrierID>

		</wsa:ReferenceProperties>

	</wsa:ReplyTo>

	<wsa:FaultTo>

		<wsa:Address>http://skonnard.com/fault/err.asmx</wsa:Address>

		<wsa:ReferenceProperties>

			<c:PatientProfile>123456</c:PatientProfile>

			<c:CarrierID>987654</c:CarrierID>

		</wsa:ReferenceProperties>

	</wsa:FaultTo>

</s:Header>

<s:Body xmlns:c="http://example.org/claims">

	<c:SubmitClaim> ... </c:SubmitClaim>

</s:Body>

</s:Envelope>




 

3. WS-Addressing 都传输了什么数据

最后我们来谈一谈 WS-Addressing 到底能传输什么数据的?

数据分类

标签名

标签含义

Endpoint Reference

/wsa:EndpointReference

 

/wsa:EndpointReference/wsa:Address

 

/wsa:EndpointReference/wsa:ReferenceProperties/

 

/wsa:EndpointReference/wsa:ReferenceProperties/{any}

 

/wsa:EndpointReference/wsa:ReferenceParameters/

 

/wsa:EndpointReference/wsa:ReferenceParameters/{any}

 

/wsa:EndpointReference/wsa:PortType

 

/wsa:EndpointReference/wsa:ServiceName

 

/wsa:EndpointReference/wsa:ServiceName/@PortName

 

/wsa:EndpointReference/wsp:Policy

 

/wsa:EndpointReference/{any}

 

/wsa:EndpointReference/@{any}

 

Message Addressing Properties

/wsa:MessageID

为了防止冗余数据传输的标志

/wsa:RelatesTo

关联 URI

/wsa:ReplyTo

正常响应的 URI

/wsa:From

发出请求的 URI

/wsa:FaultTo

出错响应的 URI

/wsa:To

发送目的地的 URI

/wsa:Action

接受信息方处理的 URI



分享到:
评论

相关推荐

    WS-Addressing.pdf

    本文旨在深入探讨WS-Addressing的概念及其在SOA环境中的作用。 #### 二、WS-Addressing背景与需求 ##### (一)问题提出 尽管SOAP协议定义了Web Services之间消息传递的基本格式,但并未涉及如何寻址Web Services的...

    Laravel开发-laravel-addressing

    在本文中,我们将深入探讨 Laravel 开发中的一个重要扩展——`laravel-addressing`。这个包专门设计用于在 Laravel 应用程序中提供强大的地址管理功能,它为开发者提供了一个优雅的方式来处理和存储用户的地址信息。...

    ws-addressing

    w3c发布地ws-addressing标准,包括endPointReference 和message information header

    使用Ajax调用SOAP Web服务2:扩展Web服务客户机

    在本系列的第二部分中,我们将深入探讨如何扩展在第一部分中介绍的JavaScript库,以支持Web服务寻址语言(WS-Addressing)和Web服务资源框架(WS-ResourceFramework)。这两个规范对于构建复杂的分布式系统至关重要...

    Cisco IOS IP Command Reference, Volume 1 of 4 -- Addressing and Services

    Cisco IOS IP Command Reference, Volume 1 of 4 -- Addressing and Services

    apache-cxf-3.3.4

    JAX-WS API,用于Web服务开发 WSDL优先工具 Java优先支持 JAX-RS (JSR 311 1.0) API,用于RESTfulWeb服务开发 JavaScript编程模型,用于客户端和服务端开发 Maven工具 支持CORBA HTTP和JMS传输层 可嵌入的...

    WS-Attacker:WS-Attacker是用于Web服务渗透测试的模块化框架。 它是由波鸿鲁尔大学网络和数据安全主席(https:__www.bochum.org_

    WS攻击者 ... WS-Addressing欺骗:请参阅 XML签名包装:请参阅 基于XML的DoS攻击:请参阅 新的自适应和智能拒绝服务攻击(AdIDoS) XML加密攻击:有关攻击和攻击的一般概述,请参见此博客文章( )。进

    信息安全_数据安全_AppSecEU2016-Daniel-Kefer-Addressing-S.pdf

    信息安全_数据安全_AppSecEU2016-Daniel-Kefer-Addressing-S 可信编译 漏洞分析 数据分析 定向攻击 云数据库

    web service standards overview

    本文将基于“Web Service Standards Overview”这一文档进行深入解析,并提炼出相关的Web服务标准知识点。此文档由innoQ Deutschland GmbH与innoQ Schweiz GmbH联合发布,提供了对SOAP规范以及一系列WS-*、WS-I标准...

    spring-ws-reference-1.5.9

    ### Spring Web Services (1.5.9):深入解析与应用实践 #### 一、Spring Web Services 概述 **Spring Web Services** 是一个...无论是对于初学者还是经验丰富的开发者来说,Spring-WS 都是一个值得深入学习的框架。

    spring-ws-reference.pdf

    - **WS-Addressing**:支持 WS-Addressing 标准,提高消息的可靠性。 - **EndpointInterceptor**:拦截请求和响应,进行额外的处理或验证。 综上所述,Spring Web Services 是一个功能强大且灵活的框架,它简化了 ...

    axis2-addressing-1.4.jar

    官方版本,亲测可用

    XEP100 - EEEPROM - Addressing - CW46_continuedy91_MC9S12XEP100_源

    标题中的“XEP100 - EEEPROM - Addressing - CW46_continuedy91_MC9S12XEP100_源”暗示了我们正在讨论一个与微控制器编程相关的主题,特别是关于MC9S12XEP100型号的微控制器以及其EEPROM(电可擦可编程只读存储器)...

    axis2-addressing-1.2.jar

    官方版本,亲测可用

    An-Efficient-and-Robust-Addressing-Protocol.rar_assignment

    Autonomous addressing protocols require a distributed and self-managed mechanism to avoid address collisions in a dynamic network with fading channels, frequent partitions, and joining/leaving nodes....

    laravel-addressing:提供寻址功能的 Laravel 包

    composer require galahad/laravel-addressing 基本用法 国家 $ country = Addressing :: country ( 'US' ); echo $ country -&gt; getName (); // "United States" echo $ country -&gt; getCountryCode (); // "US" ...

    PCI-Express-5-Update-Keys-to-Addressing-an-EvolvingSpecification

    本文将深入探讨PCIe 5.0的关键技术改进,包括规范状态、通道损失、参考时钟抖动测量以及通道解决方案空间。 首先,PCIe 5.0的基础规格在2019年第二季度发布了1.0版本,详细描述了芯片级在堆栈所有层级的行为。此外...

    Jax-ws RI.zip

    Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准,用于构建和部署Web服务。JAX-WS RI(Reference Implementation)是这个规范的官方参考实现,它提供了开发、测试和运行基于SOAP(Simple Object ...

    Networkers2009:BRKNMS-1340 - Addressing the Payment Card Industry (PCI) standard version 1.2 with Cisco Solutions

    **标题**:“Networkers2009:BRKNMS-1340 - Addressing the Payment Card Industry (PCI) standard version 1.2 with Cisco Solutions” **描述**:此标题明确指出该文档是关于如何利用思科解决方案来应对支付卡...

    西门子PLC例程-Addressing Examples and Basics.zip.zip

    这些示例可以帮助初学者深入理解这两种寻址方式,并通过实践掌握其用法。 总结来说,了解并熟练运用西门子PLC的数组和间接寻址技术,是编写高效、灵活的控制程序的关键。通过对提供的示例进行学习和实践,开发者...

Global site tag (gtag.js) - Google Analytics