欢迎光临~安博体育网页版app在线登录
语言选择: 中文版 line  英文版

安博体育网页版登录

在设计移动Web服务时需要仔细考虑的三个设计层次

时间: 2024-04-12 09:39:16 |   作者: 安博体育网页版登录

  [摘要]从何时选择移动Web服务到总体设计指导原则再到用于移动Web服务的值类型,本文提出了在设计用于移动电子设备的Web服务时需要仔细考虑的许多设计事项。文中还介绍了许多设计移动Web服务方面的最佳实践。从本文中,您能了解如何决定何时使用Web服务、在设计Web服务时需要仔细考虑什么事项,以及在规划移动Web服务时

  从何时选择移动 Web 服务到总体设计指导原则再到用于移动 Web 服务的值类型,本文提出了在设计用于移动电子设备的 Web 服务时需要仔细考虑的许多设计事项。文中还介绍了许多设计移动 Web 服务方面的最佳实践。从本文中,您能了解如何决定何时使用 Web 服务、在设计 Web 服务时需要仔细考虑什么事项,以及在规划移动 Web 服务时必须谨记哪些问题。

  Web 服务是一种集成技术。在集成异构系统时 Web 服务的价值能够获得最好的证明,因为其支持许多类型的编程语言、运行时环境和网络。当需要从不兼容的环境连接应用程序时,Web 服务就有了用武之地。通过 Web 服务,您可以将业务应用程序从 Java 2 Platform Enterprise Edition (J2EE) 连接到您还能够正常的使用某个运行在 Linux 中的应用程序将一个应用程序集成在 Windows 操作环境中。在本文中,我提供了一些针对移动 Web 服务的重要设计考虑事项,并且向您介绍了一些与之有关的最佳实践。

  在开始设计总系统的体系结构之前,您一定要做出如下决定――何时使用移动 Web 服务以及何时不使用移动 Web 服务。

  设计移动 Web 服务的最大的目的在于使嵌入式设备能够使用由服务器提供的服务,换句话说,移动 Web 服务是从 Web 服务使用者的角度进行设计的,目的是支持轻量级设备共享服务器的计算功能和数据库。

  移动 Web 服务无缝地集成了运行在不同平台上的两种不同的应用程序,并且提供了它们之间的互操作性。通常,在考虑移动设备的参与时,有三种类型的集成技术可以运用:

  与套接字通信和消息传递技术相比,Web 服务有一些突出的优势。Web 服务使用可扩展标记语言 (XML) 来传输消息(包括结构良好的数据信息),使用简单对象访问协议 (SOAP) 来传输对象。如果您使用的是套接字通信,则必须完全负责定义要传输的数据结构。而且,如果客户端和服务器是用不同的编程语言编写的(例如 C++ 和 Java 编程语言),则您的工作量将大大增加――您必须负责数据传输和 C++ 和 Java 编程中的编码细节。

  消息传递软件可能是一种解决方案,但如果您所关注的是性能,并且不担心事务和安全级别,则消息传递软件真的不是一个非常好的选择。如果使用消息传递软件,您将花大量的时间和精力解决安全问题,并且您的客户很有可能站在您的门口问:“为什么这么慢?”

  我不准备告诉您正确的选择应该是什么,而给出一些理由来说明为什么 Web 服务可能是一个好的选择。

  其中的一个理由可能是服务器端编程。即使是像 Web 服务这样好的机制,也仍然由于 XML 处理以及传输和接收 SOAP 消息的开销的原因而不能满足严格的实时处理需求。因此在设计时需要考虑两个问题:

  与普通的 HTTP 访问和专用的消息传递方法相比,每次 Web 服务调用的开销都比较大,所以当您主要考虑性能时,您可能需要首先选择另一项技术。

  由于开销的原因,如果您只需要在应用程序的各层之间进行通信,就不必选择 Web 服务。例如,不要将 Web 服务放在应用程序的视图层和控制器层之间。

  现在,我假定您已经决定使用 Web 服务。那么,在总体设计方面需要考虑哪些问题?

  您需要考虑的下一个问题是 Web 服务的总体设计。可以运用下列通用设计指导原则:

  避免 XML 元素嵌套太深,因为这可能大大延长解析、封送处理和取消封送处理的时间。

  始终优先考虑粗粒度的 Web 服务;决不要在分布式系统之间使用细粒度 Web 服务调用。

  Web 服务是一个很好的工具集,但是当您以细粒度的方式使用 Web 服务时,它可能对应用程序的性能有很大的影响,因为 XML 解析、序列化和反序列化的开销很高;这种开销可能占处理时间的百分之三十。

  在本文中,我以 Task Management 系统中的登录功能为例。驱动程序首先登录到系统,如果登录成功,则有两列任务显示在屏幕上。

  一种解决方案是首先调用登录方法,然后当该方法调用返回 true 时,调用一个方法来获取相应的任务。

  其他的事情将在一步中完成。如果驱动程序登录到 Task Management 系统,则返回驱动程序的角色以及分配的任务和启动的任务。如果登录失败,则返回指示驱动程序未登录到该系统的信息。

  对于第一种解决方案,它是细粒度登录系统,而显示任务列表需要两次调用 Web 服务;这可能带来很大的延迟。第二种解决方案是粗粒度登录系统,它返回您在一次调用中需要的所有信息,并确保由于网络延迟和系统 I/O 带来的影响最小。

  这不仅从移动 Web 服务的角度来看是适用的,而且从 Web 服务设计和(更高的层次)面向对象的软件设计来看也是适用的。正如您所知道的,接口是客户端和服务提供程序之间的契约,而且保持稳定非常重要(因为正如您所知道的,实现容易改变)。

  然后,您应该将该接口的相关要点写下来,并在这些要点的指导下完成所有实现细节。

  这是一条简单的设计指导原则。了解您的目标非常重要,目标可以驱动您编写测试用例,并且指导您编写功能实现,这也是为什么测试驱动开发 (TDD) 广泛地应用于各种开发技术的原因。

  RPC/encoded。其优点在于简单,接收方可以轻松地将消息发送到操作的实现。其缺点在于类型编码信息的开销较大,这会降低吞吐量性能。

  Document/literal。其优点在于没有类型编码信息,任何 XML 验证器都可以验证消息。其缺点在于 SOAP 消息中缺少操作名,所以发送消息很难甚至不可能。

  优先选择 JavaBeanser 组件而不是 EJB 组件作为服务提供程序

  虽然在某些情况下,EJB 组件非常有用,但是 JavaBeans 组件常常是更好的选择,特别是在开发移动 Web 服务时。实现使用 JavaBean 组件生成的服务提供程序比较简单和容易,而且与相应的会话 EJB 组件相比,JavaBean 组件更稳定。但是,如果您需要从使用 EJB 组件开发的现有 J2EE 应用程序公开 Web 服务,则请使用 EJB 组件。

  如果数组的数组、复杂类型的数组或包含另一个自定义复杂类型的复杂类型等嵌套太深,则将大大影响 Web 服务的性能。清单 1 显示一个 XML 描述示例――一个自定义数据类型 Task 类的数组:

  如果一个方法返回如 清单 1 中定义的 Task 的数组,则该方法的源代码包含在下面的清单中,方法 getTasks() 返回一个由五个 Task 对象组成的数组,如清单 2 所示。

  您可能已经注意到 XML 元素的嵌套(避免嵌套太深)和粒度考虑(使用粗粒度)之间的冲突。在实际运用中,嵌套和粒度之间应该有一个平衡。如果您更关注应用程序的性能,则应该仔细地权衡这两个考虑事项,以获得一个更好的解决方案。

  我已经讨论了设计 Web 服务的指导原则,现在我将把重点放在移动 Web 服务的考虑事项上。在大多数情况下,当将 JAX-RPC 值类型用于移动 Web 服务时需要考虑一些事情。JAX-RPC 值类型(遵循 JSR-101)是 Java 类,其值可以在服务客户端和服务端点之间移动。为了获得一致的值类型,必须遵循一系列规则。我只列出其中的几条,与本文关系最大的规则是:

  您必须具有用于需要在网络上传输的字段的 setter 和 getter 方法。

  在反序列化的过程中,SOAP 运行时环境使用缺省构造器来构造对象。如果您试图在没有公共缺省构造器的情况下编写值类型(也称为数据传输对象),在当 JAX-RPC 运行时尝试序列化和反序列化数据对象时可能会遇到错误。对于像 IBM Rational® Application Developer (RAD) 6.0 这样的 IDE,将不为该数据类型生成序列化和反序列化 Helper 类(由 RAD 通过前缀 _Helper、_Ser 和 _Deser 生成),所以在调用与自定义数据类型相关的方法时会出现序列化错误。不带参数的构造器确保可以根据序列化状态远程构造对象。

  您可以将清单 6 中所示的方法添加到 Web 服务中,该方法将返回单个 FailTask 对象。

  为了有效地使用 Web 服务,您必须或多或少地使用数据集合。但是,必须提醒:当处理许多值类型时,事情会变得比较麻烦,因此需要考虑以下问题。

  使用数组的最后一个原因是,移动 Web 服务不支持 Java Collection 类型,这使得所有其他的解释都显得没有必要。这意味着您可能无法从形式良好的 WSDL 文件为移动 Web 服务生成存根文件。

  在 JAX-RPC 子集规范中,只需要第二种映射。表 1 显示了从支持的 XML 数据类型到 Java 类型的映射的简要列表;有关详细信息,请参阅 JSR-172

  那么,在尝试传输日期或时间表示形式时,您应该使用什么?改为使用 long 类型的时间。long 类型的日期格式与不同时区的时间表示形式无关,并且因为它是基元类型,所以比其他类型的 Java 对象更有效。

  为了在 CLDC 1.0 中缺省支持 xsd:float 和 xsd:double,实现必须 生成代码来将这些类型映射到 java.lang.String。为了支持为 float 和 double 提供本机支持的配置和平台(CLDC 1.1 和 CDC),存根生成器实现也必须 生成代码来将这些类型映射到适当的本机 Java 类型。(详细信息,请参阅参考资料,以获得指向 JSR-172: J2ME Web 服务规范的链接。)

  对于针对 CLDC 1.0 的 Web 服务客户端,所生成的存根如清单 9 所示。

  所以,当调用 CLDC 1.0 中的 Web 服务时,您必须使用 addTwo() 方法提供两个 String 参数,而对于针对平台 CLDC 1.1 的 Web 服务客户端,所生成的服务接口与清单 10 中所描述的类似:

  JSR-172 指定了以副本的形式传送并以副本的形式创建返回值的所有参数。但是,当处理数据集合时,零数组 (返回零)和空数组 (返回其本身)需要密切关注。

  我的建议是尽可能地避免使用空数组。当处理移动 Web 服务时,空数组可能是一个问题。

  当生成 Web 服务存根和使用生成的存根测试 Web 服务时,本例中的每一个部分都将正常工作。但是,因为在结束一个阶段之前您需要使用 Jtest 进行完整的代码检查,所以当您对代码片段运行 Jtest 时,您将看到一条建议:“Return zero-length arrays instead of null”。在犹豫片刻之后后,您将赞同 Jtest 的建议。如果您返回零数组,该代码的客户端必须编写额外的代码来检查返回值是否为零(如清单 13 所示)。

  在修改之后,您会认为代码逻辑没有更改,并再次运行客户端来调用 Web 服务,但是现在却引发了异常。到目前为止,您已经根据 Jtest 的建议做了许多小的修补――您忘记修改了什么――这可能导致需要花额外的时间来努力找到发生错误的原因。这个过程真的漫长而乏味。

  那么,问题究竟出在什么地方呢?一般来说,对于零对象数组(如 SimpleTask),返回的 SOAP 消息如清单 14 所示

  其不同之处在于 getSimpleTasksReturn/ 和 getSimpleTasksReturn xsi:nil = true 之间。图 2 说明了空数组参数大部分时间是无效的。对于自定义的数据类型(包括另一个自定类型的数组),不要将类变量初始化为空数组――相反,要将其初始化为零数组,尽管所生成的空数组和零数组的 WSDL 定义是相同的。

  在处理移动 Web 服务时,您需要更加谨慎,因为移动 Web 服务规范只支持部分 API。如果您计划开发移动 Web 服务,则当您处理值类型和集合类型时,我向您介绍了一些窍门。此外,我还提供了以下信息:

  设计前考虑事项,例如何时使用 Web 服务,以及如何分析使用 Web 服务、套接字或消息传递技术之间的利弊。

  为什么您应该使用 JavaBeans 组件而不是 EJB 技术作为您的服务提供程序

  在使用 JAX-RPC 值类型时需要考虑的移动 Web 服务设计事项,包括:

  本站系本网编辑转载,会尽可能注明出处,但不排除无法注明来源的情况,转载目的是传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系, 来信: 我们将在收到邮件后第一时间删除内容!

  [声明]本站文章版权归原作者所有,内容为作者个人观点,不代表本网站的观点和对其真实性负责,本站拥有对此声明的最终解释权。

  4月2日:工信部规模以上电子信息制造业增长48.5%;中芯国际宣布全线日:互联网企业完成业务收入1990亿元;华为去年营收增长3.8%

  3月29日:华为小米等手机应用商店暂停下载耐克、阿迪达斯等App;鸿蒙系统即将出世

  3月26日:过去4年中苹果收购的AI公司数量最多;亚马逊发布三驾马车中国业务战略

  3月25日:华为将投入超2亿美元建设生态;密斯不看好金融科技公司发行数字币

  3月24日:1-2月电信业务收入2373亿元;百度汽车最迟2024年量产

  3月23日:2020四季度融合系统同比微弱增长0.2%;银行推广数字人民币货币钱包

  /g,); str = str.replace(/[ ]/g, ); return str; } var title = 在设计移动Web服务时需要考虑的三个设计层次; var description = clearBr( 从何时选择移动Web服务到总体设计指导原则再到用于移动Web服务的值类型,本文提出了在设计用于移动电子设备的Web服务时需要考虑的许多设计事项。文中还介绍了许多设计移动Web服务方面的最佳实践。从本文中,您可以了解如何决定何时使用Web服务、在设计Web服务时需要仔细考虑什么事项,以及在规划移动Web服务时 ); var thumb = ; var url =