发布网友 发布时间:2022-05-01 19:45
共2个回答
懂视网 时间:2022-04-12 14:16
SOAP 1.2 与 GET 请求 SOAP 1.2 带来的变化进一步把 Web 服务编织到 Internet 的大网中。变化之一是 GET 方法的引入。GET 之所以重要是因为它支持各种优化。这一点已经过 Web 自身的验证,它广泛地使用 GET 方法。通过本技巧可以进一步了解这一点。 SOAP 1.0
SOAP 1.2 与 GET 请求
SOAP 1.2 带来的变化进一步把 Web 服务编织到 Internet 的大网中。变化之一是 GET 方法的引入。GET 之所以重要是因为它支持各种优化。这一点已经过 Web 自身的验证,它广泛地使用 GET 方法。通过本技巧可以进一步了解这一点。
SOAP 1.0 发布以来,很多人曾经抱怨它对 HTTP POST 方法的依赖。许多人认为 SOAP 利用了一种流行的协议(HTTP),但一点也没有考虑和理解建立在其上的体系结构。
W3C 主持开发的 1.2 版本解决了这一问题。W3C 曾经在抽象该协议的许多方面花费了大力气,更容易通过各种不同的技术使用该协议。通过修订,SOAP 1.2 除了 HTTP 之外还支持 SMTP,并能更好的利用 HTTP。
关于 POST 方法
POST 有什么问题呢?简而言之,HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的。
在这里,所谓 安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。
比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。
POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。
GET 与 POST 之间的区别并不总是那么严格,也存在一些共性。许多站点在 POST 请求中封装了简单的信息获取,可能是因为开发人员认为这样对他来说更简单。
尽管关于 HTTP 方法的讨论看起来似乎是抽象的和理论性的,但并非如此。浏览器和中介软件(代理、防火墙和内容提交解决方案 laAkamai)根据区分不同请求能力来获得优化的性能(请参阅 参考资料)。
SOAP 结盟 GET
SOAP 最初只支持 POST 请求。Web 服务仍然能够实现上述定义的安全服务。比如,查询订单进展情况的服务既是安全的也是幂等的。根据 HTTP 规范,它应该作为 GET 请求实现。而根据 SOAP 1.0 则必须使用 POST。
SOAP 1.2 引入了消息交换模式(Message Exchange Patterns,MEPs)和一种新的 HTTP 绑定。两者相结合就能实现答复 GET 请求的 Web 服务。MEP 描述了客户和服务器之间的交互模式。SOAP Request-Response MEP 是一种典型的 Web 服务交互:客户向服务器发出请求,服务器应答。
我将在这里进一步考察 SOAP Response MEP。MEP 只定义了一个响应而没有请求。在实践中,这意味着请求已经发出,但不是 SOAP 请求,只有响应是 SOAP。当与新的 HTTP 请求结合时,Response MEP 就可以支持 GET 请求。其工作原理如下:
* 客户发出 GET 请求。它把 Accept 头设为 application/soap+xml ,以便请求一个 SOAP 答复。
* 服务器答复,客户将响应作为正常的 SOAP 响应处理。
服务器通过 Accept 头区分 SOAP 请求和常规的 HTML 请求。客户可以在 Accept 中使用 q 属性设置不同的 content/type 表明自己的参数选择。
根据服务的需要,客户可以通过一般的 URL 编码方法(通常放在 ? 字符后)在 URL 中包含参数。比如,报告服务器场状态的服务可能不需要任何参数。按照定义,它返回当前服务器的状态。相反,报告产品可用性和价格的服务就需要产品标识符(或者名称)作为参数。
现在您可能迷惑客户如何知道调用哪个 URL 以及传递哪个参数,因为请求并不是 SOAP 的一部分。答案很简单:SOAP 服务器应该完成常规 Web 服务器所做的工作,并在上一次交互中包含该 URL。没有什么妨碍 GET 与 POST 的混合与匹配。
作为一个例子,想象一个处理办公用品(笔、纸、剪刀等等)订单的服务。该服务通过 SOAP 接收订单,显然这样的请求既不是安全的也不是幂等的,因此作为 POST 发出。服务器的响应可以包含一个 URL 来跟踪订单的处理过程。跟踪是安全的和幂等的,因此最好通过 GET 来实现。
Web 背后的简单原理已经证明了自身的灵活性与可靠性。作为 Web 服务中最重要的标准之一,SOAP 与这种取得非凡成功的体系结构的更密切结合,这是一种非常积极的进展。
在等待所青睐的工具包升级到 SOAP 1.2 和 WSDL 2.0 之前,先检查一下您的 Web 服务,识别出那些迁移到 GET 绑定时作为首要目标的安全操作。
SOAP 1.2
从编程模型的角度而言,SOAP 1.1 和 SOAP 1.2 之间并没有太多的差异。作为 Java 程序员,您只会在使用处理程序时遇到这些差异,我们将在以后的技巧文章中对如何处理这种情况进行讨论。SAAJ 1.3 已更新以支持 SOAP 1.2。
XML/HTTP
与 SOAP 1.2 的更改类似,从编程模型的角度而言,SOAP/HTTP 和 XML/HTTP 消息之间并没有太多的差异。作为 Java 程序员,您只会在使用处理程序时遇到这些差异,我们将在以后的技巧文章中对如何处理这种情况进行讨论。HTTP 绑定具有自己的处理程序链和自己的一组消息上下文属性。
WS-I Basic Profiles
JAX-RPC 1.1 支持 WS-I Basic Profile (BP) 1.0。从那时起,WS-I 人员就完成了 BP 1.1(以及关联的 AP 1.0 和 SSBP 1.0)的开发。这些新概要阐明了一些小要点,更明确地定义了附件。JAX-WS 2.0 支持这些较新的概要。在大部分情况下,其间的差异并不会影响 Java 编程模型。不过附件除外。WS-I 不仅处理了有关附件的一些问题,而且还定义了自己的 XML 附件类型:wsi:swaRef。
很多人都被这些概要搞糊涂了。为了弄清楚其间的问题,将需要了解一下其相关历史。
WS-I 的第一个基本概要 (BP 1.0) 在阐明各个规范方面做得非常不错,但它并不完美。尤其对 SOAP with Attachments (Sw/A) 的支持仍然相当不明确。在第二个工作循环中,WS-I 人员将附件从基本概要 (BP 1.1) 中分离出来,并对第一版中一些没有讨论的内容进行了补充。当时他们还添加了两个互不包括的基本概要补充文档:AP 1.0 和 SSBP 1.0。AP 1.0 是附件概要 (Attachment Profile),描述如何使用 Sw/A。SSBP 1.0 是简单 SOAP 绑定概要 (Simple SOAP Binding Profile),描述并不支持 Sw/A 的 Web 服务引擎(如 Microsoft 的 .NET)。WS-I 所提供的其他概要文件都是以这些基本概要文件为基础构建的。
Java 5
对 Java 语言进行了一系列更改。JAX-WS 依赖于:Annotation、通用函数和执行程序。我们将在后续的技巧文章中具体讨论 JAX-WS 如何依赖于这个新功能。有关 Java 的这些新功能的信息,请参见参 考资料中的 Java 5 链接。
总结
JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。其中有些内容保持不变,但大部分编程模型都或多或少有些不同。本技巧文章中介绍的主题将在一系列技巧文章中展开讨论,这个系列的文章对 JAX-WS 和 JAX-RPC 间的区别进行了详细的讨论,我们将在随后的数月中陆续发布。大致看来,可能会因为以下这些原因而决定从 JAX-RPC 迁移到 JAX-WS,或保持不变。
希望继续使用 JAX-RPC 1.1 的原因:
升级到 JAX-WS 2.0 的原因:
热心网友 时间:2022-04-12 11:24
1. 什么是webservice 从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问 2. 基本概念 SOAP Web service建好以后,其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的远程过程调用( RPC)方法来调用Web service。SOAP规范定义了SOAP消息的格式,以及怎样通过Http协议来使用SOAP。SOAP也是基于xml和XSD的,XML是SOAP的数据编码方式。客户端和服务端之间的方法调用请求和结果返回值都放在这些消息里。 XML和XSD可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的。XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是 64位?这些细节对实现互操作性都是很重要的。W3C制定的XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web service平台就是用XSD来作为其数据类型系统的。当用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合Web service标准,所有使用的数据类型都必须被转换为XSD类型。3.Webservice的技术特点 长项一: 跨防火墙的通信如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。在这种情况下,使用DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一个用户手中。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。 举个例子,在应用程序里加入一个新页面,必须先建立好用户界面(Web页面),并在这个页面后面,包含相应商业逻辑的中间层组件,还要再建立至少一个ASP页面,用来接受用户输入的信息,调用中间层组件,把结果格式化为HTML形式,最后还要把“结果页”送回浏览器。要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。 如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立ASP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或.NET这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的“结果页”。 从经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用Web Service这种结构,可以节省花在用户界面编程上20%的开发时间。另外,这样一个由Web Service组成的中间层,完全可以在应用程序集成或其它场合下重用。最后,通过Web Service把应用程序的逻辑和数据“暴露”出来,还可以让其它平台上的客户重用这些应用程序。 长项二: 应用程序集成企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过Web Service,应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用。 例如,有一个订单登录程序,用于登录从客户来的新订单,包括客户信息、发货地址、数量、价格和付款方式等内容;还有一个订单执行程序,用于实际货物发送的管理。这两个程序来自不同软件厂商。一份新订单进来之后,订单登录程序需要通知订单执行程序发送货物。通过在订单执行程序上面增加一层Web Service,订单执行程序可以把“Add Order”函数“暴露”出来。这样,每当有新订单到来时,订单登录程序就可以调用这个函数来发送货物了。 长项三: B2B的集成 用Web Service集成应用程序,可以使公司内部的商务处理更加自动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B集成。Web Service是B2B集成成功的关键。通过Web Service,公司可以把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子*系统“暴露”出来,客户就可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购*。当然,这并不是一个新的概念, EDI(电子文档交换)早就是这样了。但是,Web Service的实现要比EDI简单得多,而且Web Service运行在Internet上,在世界任何地方都可轻易实现,其运行成本就相对较低。不过,Web Service并不像EDI那样,是文档交换或B2B集成的完整解决方案。Web Service只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。用Web Service来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为Web Service,就可以让任何指定的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在B2B集成上的时间和成本,让许多原本无法承受EDI的中小企业也能实现B2B集成。 长项四: 软件和数据重用 软件重用是一个很大的主题,重用的形式很多,重用的程度有大有小。最基本的形式是源代码模块或者类一级的重用,另一种形式是二进制形式的组件重用。 当前,像表格控件或用户界面控件这样的可重用软件组件,在市场上都占有很大的份额。但这类软件的重用有一个很大的*,就是重用仅限于代码,数据不能重用。原因在于,发布组件甚至源代码都比较容易,但要发布数据就没那么容易,除非是不会经常变化的静态数据。Web Service在允许重用代码的同时,可以重用代码背后的数据。使用Web Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的Web Service就可以了。举个例子,要在应用程序中确认用户输入的地址,只需把这个地址直接发送给相应的Web Service,这个Web Service 就会帮你查阅街道地址、城市、省区和邮政编码等信息,确认这个地址是否在相应的邮政编码区域。Web Service 的提供商可以按时间或使用次数来对这项服务进行收费。这样的服务要通过组件重用来实现是不可能的,那样的话你必须下载并安装好包含街道地址、城市、省区和邮政编码等信息的数据库,而且这个数据库还是不能实时更新的。 另一种软件重用的情况是,把好几个应用程序的功能集成起来。例如,要建立一个局域网上的门户站点应用,让用户既可以查询联邦快递包裹,查看股市行情,又可以管理自己的日程安排,还可以在线购买电影票。现在Web上有很多应用程序供应商,都在其应用中实现了这些功能。一旦他们把这些功能都通过Web Service “暴露”出来,就可以非常容易地把所有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。 将来,许多应用程序都会利用Web Service,把当前基于组件的应用程序结构扩展为组件/Web Service 的混合结构,可以在应用程序中使用第三方的Web Service 提供的功能,也可以把自己的应用程序功能通过Web Service 提供给别人。两种情况下,都可以重用代码和代码背后的数据。