为啥在 Web 服务中使用 complexType?

Posted

技术标签:

【中文标题】为啥在 Web 服务中使用 complexType?【英文标题】:Why use complexType in web service?为什么在 Web 服务中使用 complexType? 【发布时间】:2012-04-23 18:28:41 【问题描述】:

我刚刚读了一本关于网络服务的书,上面说有“RPC 风格的网络服务”和“文档风格的网络服务”。第二个是在 WSDL 序列和 complexType 中使用。我什么时候应该使用这种风格?

【问题讨论】:

只是古玩,你读了哪本书 【参考方案1】:

当您想将联系人、消息或某些编程对象等数据对象原样传输到相应技术的客户端应用程序时,您应该使用复杂数据类型。

例如,如果您使用的是 .NET 或 Java 中构建的复杂类型 Web 服务,并且您从 php 或 Ruby 调用该 Web 服务,您将从 .NET 或 Java 中获取对象原样导出(在 98% 的情况下,非常PHP 或 Ruby 中的次要语言特定属性已更改)。

因此,如果您不喜欢简单的字符串、整数、布尔或数组数据类型,您可以在 WSDL 中使用复杂类型。开始并不容易,但一旦开始就会很有趣。

如果您使用 PHP 开发 Web 服务,Zend Framework 的 WSDL 自动发现功能可以让您从 PHP 自动生成 WSDL,但如果您的复杂性增加,则与您自己手动编写 WSDL 没什么两样。

【讨论】:

【参考方案2】:

基本上,几乎所有仍在使用 SOAP Web 服务(即尚未迁移到 REST)的人都在使用“文档样式”。

除非您手动编写 WSDL,否则这种区别几乎没有意义。那是谁做的;)?

如果您使用 Visual Studio 或 Axis 等工具生成 WSDL,并使用工具生成存根,那么唯一真正重要的是一个工具生成的代码是否能够理解另一个工具生成的代码。这又回到了“就 SOAP 而言,它几乎是一个文档风格的世界”。或者,更具体地说,是一个“文档样式/文字包装”的世界。

这里有几个不错的链接:

http://mangstacular.blogspot.com/2011/05/wsdl-soap-bindings-confusion-rpc-vs.html

http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/

Document or RPC based web services

【讨论】:

【参考方案3】:

webservice 中的complexType 将用于表示用户定义的数据类型,例如您要传输的对象(不是 java 默认类型),例如,如果您有包含姓名、地址、电话等的 UserVO,则需要定义此作为 WSDL 中的 ComplexType 发送。 Java 集合/数组也被视为复杂类型。这是关于Types of Webserices 和example complex type 的好教程。

【讨论】:

以上是关于为啥在 Web 服务中使用 complexType?的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1 中使用 Code First 的 ComplexType 集合属性

在 schema 中, simpleType 与 complexType有啥区别?

为啥在 Web Server 基础架构中使用后端服务器和 RPC?

为啥我必须使用 WCF 而不是 Web 服务? [复制]

如何声明一个 complexType 只有一个子元素?

如何使用 WebAPI 返回 Dictionary<complexType,int>