|
本节阐释可以给 Web 服务方法传递和从 Web 服务方法返回各种数据类型。由于 XML Web 服务实现建立在 XML 序列化结构之上,因此它支持相当多的数据类型。下表列出了在使用 SOAP 协议(例如,使用由 Web 服务描述语言工具 WSDL.exe 生成的代理)时 Web 服务方法支持的数据类型。
| 值 |
说明 |
| 基元类型 |
标准基元类型。 受支持的基元类型的完整列表是 String、Char、Byte、Boolean、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Guid、Decimal、DateTime (与 XML 的 timeInstant 一样)、DateTime(与 XML 的 date 一样)、DateTime(与 XML 的 time 一样)和 XmlQualifiedName(与 XML 的 QName 一样)。 |
| 枚举类型 |
枚举类型,例如“public enum color { red=1, blue=2 }” |
| 基元数组,枚举 |
上述基元类型的数组,如 string[] 和 int[] |
| 类和结构 |
具有公共字段或属性的类和结构类型。 公共属性和字段已序列化。 |
| 类数组(结构) |
上述类型的数组。 |
| 数据集 |
ADO.NET }数据集类型(有关示例,请参阅下一节)。 数据集也可以字段的形式出现在结构或类中。
注意:Microsoft Visual Studio .NET 和 XSD.EXE SDK 实用工具支持数据集具有强类型。这些工具生成一个类,该类从数据集继承以产生 DataSet1,并添加若干特定于具体某个 XML 架构的方法/属性/其他对象。如果您传递数据集,XML Web 服务始终将架构与数据(这样它就知道您正在传递的表和列)及其类型(如 int、string 类型)一起传输。如果您传递数据集的一个子类(如 DataSet1),则 XML Web 服务假定您正在构造函数中添加表/列,并假定这些表 /列表示您的架构。 |
| 数据集数组 |
上述类型的数组。 |
| XmlNode |
XmlNode 是 XML 段在内存中的表示形式(类似轻量 XML 文档对象模型)。例如 “<comment>This is<b>pretty</b> neat</comment>” 可以存储在 XmlNode 中。可以将 XmlNodes 作为参数传递,这些参数将添加到以 SOAP 兼容方式传递到 XML Web 服务的 XML 的其余部分(其他参数)。返回值同样如此。这使您可以传递或返回结构随调用改变的 XML,或者可能不知道正在传递的所有类型的 XML。XmlNode 也可以字段的形式出现在结构或类中。 |
| XmlNode 的数组 |
上述类型的数组。 |
返回值:
不论是使用 SOAP 还是 HTTP GET/POST 来调用 XML Web 服务,返回值都支持上述所有类型。
参数:
当使用 SOAP 协议时,按值参数和按引用参数 (in/out) 都受支持。按引用参数可以沿两个方向发送值:向上发送到服务器和向下发送回客户端。当使用 HTTP GET/POST 将输入参数传递给 XML Web 服务时,只支持一组有限的数据类型,并且它们必须是按值参数。HTTP GET/POST 参数支持的类型在下面列出:
| 类型 |
说明 |
| 基元类型(有限) |
大多数标准基元类型。受支持的基元类型的完整列表是 Int32、String、Int16、Int64、Boolean、Single、Double、Decimal、DateTime、UInt16、UInt32、UInt64 和 Currency。从客户端的角度看,所有这些类型都转换为 string。 |
| 枚举类型 |
枚举类型,例如“public enum color { red=1, blue=2 }”。从客户端的角度看,枚举变成每个值都有静态常数字符串的类。 |
| 基元数组,枚举 |
上述基元类型的数组,如 string[] 和 int[] |
下面的示例使用从 WSDL.exe 生成的 SOAP 代理,说明上面所列类型的用法。注意,由于 .asmx 文件中定义的公共类不止一个,因此必须使用 WebService 指令的“Class”属性指定将那个视为 WebService 类:
<%@ WebService Language="C#" Class="DataTypes" %>
- SayHello 方法显示从服务返回字符串。
- SayHelloName 方法返回字符串,并将字符串作为参数。
- GetIntArray 方法显示如何返回整数数组。
- GetMode 方法返回枚举值。
- GetOrder 方法返回类(在此处的结构几乎一样)。
- GetOrders 方法返回 Order 对象的数组。
使用 WSDL.exe 命令行代理生成工具,这些数据类型的封送处理对使用客户端应用程序是透明的。下面是上述 XML Web 服务的一个示例客户端应用程序:
|