📄 webservicetypes.aspx
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>
<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->
<h4>XML Web 服务类型封送处理</h4>
本节阐释可以给 <b>Web 服务</b>方法传递和从 <b>Web 服务</b>方法返回各种数据类型。由于 XML Web 服务实现建立在 XML 序列化结构之上,因此它支持相当多的数据类型。下表列出了在使用 SOAP 协议(例如,使用由 Web 服务描述语言工具 WSDL.exe 生成的代理)时 <b>Web 服务</b>方法支持的数据类型。
<p>
<div class="indent">
<table class="table2" cellpadding="3" width="90%">
</tr>
<tr><th width="180"><b>值</b></th><th><b>说明</b></th></tr>
<tr><td><b>基元类型</b></td><td>标准基元类型。 受支持的基元类型的完整列表是
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 一样)。
</td></tr>
<tr><td><b>枚举类型</b></td><td>枚举类型,例如“public enum color { red=1, blue=2 }”</td></tr>
<tr><td><b>基元数组,枚举</b></td><td>上述基元类型的数组,如 string[] 和 int[]</td></tr>
<tr><td><b>类和结构</b></td><td>具有公共字段或属性的类和结构类型。 公共属性和字段已序列化。</td></tr>
<tr><td><b>类数组(结构)</b></td><td>上述类型的数组。</td></tr>
<tr><td><b>数据集</b></td><td>ADO.NET }数据集类型(有关示例,请参阅下一节)。 数据集也可以字段的形式出现在结构或类中。
<p>
<b>注意:</b>Microsoft Visual Studio .NET 和 XSD.EXE SDK 实用工具支持数据集具有强类型。
这些工具生成一个类,该类从数据集继承以产生 DataSet1,并添加若干特定于具体某个 XML 架构的方法/属性/其他对象。如果您传递数据集,XML Web 服务始终将架构与数据
(这样它就知道您正在传递的表和列)及其类型(如 int、string 类型)一起传输。如果您传递数据集的一个子类
(如 DataSet1),则 XML Web 服务假定您正在构造函数中添加表/列,并假定这些表
/列表示您的架构。
</td></tr>
<tr><td><b>数据集数组</td><td>上述类型的数组。</b></td></tr>
<tr><td><b>XmlNode</b></td><td>
XmlNode 是 XML 段在内存中的表示形式(类似轻量 XML 文档对象模型)。例如
“<comment>This is<b>pretty</b> neat</comment>” 可以存储在 XmlNode 中。可以将
XmlNodes 作为参数传递,这些参数将添加到以 SOAP 兼容方式传递到 XML Web 服务的 XML 的其余部分
(其他参数)。返回值同样如此。这使您可以传递或返回结构随调用改变的 XML,
或者可能不知道正在传递的所有类型的 XML。XmlNode 也可以字段的形式出现在结构或类中。
</td></tr>
<tr><td><b>XmlNode 的数组</b></td><td>上述类型的数组。</td>
</table>
</div>
<p>
<div class="indent">
<b>返回值:</b><p>不论是使用 SOAP 还是 HTTP GET/POST 来调用 XML Web 服务,返回值都支持上述所有类型。
<p>
<b>参数:</b><p>当使用 SOAP 协议时,按值参数和按引用参数 (in/out) 都受支持。按引用参数可以沿两个方向
发送值:向上发送到服务器和向下发送回客户端。当使用 HTTP GET/POST 将输入参数传递给 XML Web 服务时,只支持一组有限的数据类型,
并且它们必须是按值参数。HTTP GET/POST 参数支持的类型在下面列出:
<p>
</div>
<div class="indent">
<table class="table2" width="90%">
</tr>
<tr><th width="180"><b>类型</b></th><th><b>说明</b></th></tr>
<tr><td><b>基元类型(有限)</b></td><td>大多数标准基元类型。受支持的基元类型的完整列表是
Int32、String、Int16、Int64、Boolean、Single、Double、Decimal、DateTime、UInt16、UInt32、UInt64 和 Currency。
从客户端的角度看,所有这些类型都转换为 string。
</td></tr>
<tr><td><b>枚举类型</b></td><td>枚举类型,例如“public enum color { red=1, blue=2 }”。
从客户端的角度看,枚举变成每个值都有静态常数字符串的类。
</td></tr>
<tr><td><b>基元数组,枚举</b></td><td>上述基元类型的数组,如 string[] 和 int[]</td></tr>
</table>
</div>
<p>
下面的示例使用从 WSDL.exe 生成的 SOAP 代理,说明上面所列类型的用法。注意,由于 .asmx 文件中定义的公共类不止一个,因此必须使用 <b>WebService</b> 指令的“Class”属性指定将那个视为 <b>WebService</b> 类:
<p>
<div class="code"><pre>
<%@ WebService Language="C#" Class="DataTypes" %>
</pre></div>
<p>
<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/CS/DataTypes.asmx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypes.src"
Icon="/quickstart/aspplus/images/datatypes_asmx.gif"
Caption="C# DataTypes.asmx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/VB/DataTypes.asmx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypes.src"
Icon="/quickstart/aspplus/images/datatypes_asmx.gif"
Caption="VB DataTypes.asmx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/JS/DataTypes.asmx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypes.src"
Icon="/quickstart/aspplus/images/datatypes_asmx.gif"
Caption="JScript DataTypes.asmx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/CS/DataTypes.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="C# DataTypes.asmx?wsdl"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/VB/DataTypes.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="VB DataTypes.asmx?wsdl"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/JS/DataTypes.asmx?WSDL"
Icon="/quickstart/aspplus/images/service_sdl.gif"
Caption="JScript DataTypes.asmx?wsdl"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>
<p>
<UL>
<LI><B>SayHello</B> 方法显示从服务返回字符串。
<LI><B>SayHelloName</B> 方法返回字符串,并将字符串作为参数。
<LI><B>GetIntArray</B> 方法显示如何返回整数数组。
<LI><B>GetMode</B> 方法返回枚举值。
<LI><B>GetOrder</B> 方法返回类(在此处的结构几乎一样)。
<LI><B>GetOrders</B> 方法返回 <b>Order</b> 对象的数组。
</UL>
<p>
使用 WSDL.exe 命令行代理生成工具,这些数据类型的封送处理对使用客户端应用程序是透明的。下面是上述 XML Web 服务的一个示例客户端应用程序:
<p>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/CS/DataTypesClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypesClient.src"
Icon="/quickstart/aspplus/images/datatypes_client.gif"
Caption="C# DataTypesClient.aspx"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/VB/DataTypesClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypesClient.src"
Icon="/quickstart/aspplus/images/datatypes_client.gif"
Caption="VB DataTypesClient.aspx"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/services/DataTypes/JS/DataTypesClient.aspx"
ViewSource="/quickstart/aspplus/samples/services/DataTypes/DataTypesClient.src"
Icon="/quickstart/aspplus/images/datatypes_client.gif"
Caption="JScript DataTypesClient.aspx"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -