.NET之ASP Web Services 入门
Internet进化得飞快,Web站点从仅仅提交给浏览器一个用户界面页面,到现在已经转变
为能够将组织、应用、服务以及设备迅速联结在一起的可设计Web站点。Web站点不再处
于被动的地位,它们变成了可再用的智能化Web Services,即Web服务。
通用语言执行环境(Common Language Runtime,简称CLR)本身就支持创建及使用Web
Services。它使用可编程抽象概念,无论对于ASP.NET Web Form开发人员还是VB用户,
这都是一致的且熟悉的。而且,结果模型可升级、可扩展,支持开放的Internet标准,
比如HTTP、XML、SOAP、SD,因此,它可以被任何客户端或者具备Internet功能的设备访
问和使用。
为了更快更好地理解.NET的ASP Web Service应用,下面我们举一个例子来说明。例子就
是经典的Hello World应用,也就是简单地返回一个"Hello World"字符串信息。
编写代码、领会含义
ASP.NET通过.asmx文件来支持Web Services,一个.asmx文件就是一个文本文件,类似于
.aspx文件。这些文件可以属于包含.aspx文件的ASP.NET
应用程序的一部分。同时,与.aspx文件一样,它们是按照URI方式寻址的。
可以使用最简单的文本编辑器来编写.asmx文件。下面就是.asmx 文件的全部代码。为对
照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:
C#
<%@ WebService Language="C#" Class="HelloWorld" %>
using System;
using System.Web.Services;
public class HelloWorld : WebService {
[WebMethod] public String SayHelloWorld() {
return "Hello World";
}
}
VB
<%@ WebService Language="VB" Class="HelloWorld" %>
Imports System.Web.Services
Public Class HelloWorld :Inherits WebService
Public Function SayHelloWorld() As String
Return("Hello World")
End Function
End Class
JScript
<%@ WebService Language="JScript" Class="HelloWorld" %>
import System;
import System.Web.Services;
public class HelloWorld extends WebService {
WebMethodAttribute public function SayHelloWorld() : String {
return "Hello World";
}
}
上面的代码包含了以下几个含义:
代码最开始必须进行WebService声明,从而定义这个文件为一个Web Service。而且,在
同一行中设置好编程语言的类型。
然后,引入名字空间System.Web.Services。注意,这个名字空间属于最基本的元素,必
须要包含它。
接着,声明service中的功能模块,也就是类模块,这里的类名叫HelloWorld。这个类来
源于基类WebService,而且应该是public类型。
最后,定义service的可访问方法。在表示方法的符号前面,要设置好自定义属性。对应
于C#语言,属性值就是[WebMethod];对应于VB,就是。如果没有设置这个属性,那么这
个方法就不能从service中访问。一个局部应用可以使用任何的public类型的类,但是只
有具备[WebMethod]的类才可以通过SOAP被远程地访问。
例程测试
当对service的请求发生时,.asmx文件将自动地被ASP.NET运行环境所编译。随后的请求
就可以由缓冲的预编译类型对象执行。
为了测试编写好的代码,我们需用一个支持ASP.NET的Web服务器。假设这个Web服务器的
名称叫做Foo,其上有一个虚拟目录Bar。请跟随下面步骤开始测试:
将代码保存为HelloWorld.asmx
放到Web服务器Foo的虚拟目录Bar下
打开Internet Explorer5,在地址栏输入http://Foo/Bar/HelloWorld.asmx
这时,我们将看到关于这个Web Service的公用方法-也就是那些标记为WebMethod属性
的字符,并得知调用这些方法可以使用的协议,比如SOAP或者HTTP GET。
在Internet Explorer的地址栏中输入http://Foo/Bar/HelloWorld.asmx?SDL后,将产生
基于服务描述语言(Service
Description Language :SDL)语法的具备相同信息的XML文件。这个SDL文件非常重要
,客户端就是使用它来访问service。
从客户端进行访问
除了允许开发者使用的创建Web Services的技术以外,Microsoft的.NET框架给客户端提
供了一套访问并使用Web Services的精致且高深的工具和代码。由于Web
Services是基于如简单对象访问协议SOAP(Simple Object Access Protocol)和HTTP这
样的开放协议标准的,从而,我们就可以使用这种客户端技术使用非ASP.NET的Web
Services。当然,这也需用高水平地合成ASP.NET Web Services和这种客户端技术。
SDK中有一个工具叫做WebServiceUtil.exe,我们可以使用它来下载一个Web Services的
SDL描述语言,并创建表达这个Service的代理类。比如,当我们输入以下命令,就可以
创建一个叫做HelloWorld.cs的代理类:
WebServiceUtil /c:proxy /pa:http://someDomain.com/someFolder/HelloWorld.asmx
?SDL
这个类看起来与前面创建的类非常相似。它包含一个方法SayHelloWorld,该方法返回一
个字符串。将这个代理类编译到一个应用程序中,然后调用这个代理类的方法,结果就
是:通过HTTP,这个代理类包装SOAP请求,然后接收SOAP编码响应,最后汇集成为一个
字符串。
从客户端来看,代码是很简单的,返回的结果也很简单,就是一个字符串"Hello World
"。同样为了对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:
C#
HelloWorld myHelloWorld = new HelloWorld();
String sReturn = myHelloWorld.SayHelloWorld();
VB
Dim myHelloWorld As New HelloWorld()
Dim sReturn As String = myHelloWorld.SayHelloWorld()
JScript
var myHelloWorld:HelloWorld = new HelloWorld();
var sReturn:String = myHelloWorld.SayHelloWorld();
Web Services 中的数据类型
通过上面的例程,你可能对Web Services有了初步的印象。下面,我们将介绍Web Serv
ices中涉及到的各种数据类型,也就是Web Services方法的输入/输出参数类型。因为W
eb Services的执行是建立在XML架构之上的,所以它能够支持丰富的数据类型。下表列
出了使用SOAP协议时Web Services支持的数据类型:
类 型
含 义
基础类型
也即标准基础类型,包括: String、Int32、Byte、Boolean、Int16、Int64、Single
、Double、Decimal、DateTime(类似XML中的timeInstant)、 DateTime(类似XML中的da
te)、DateTime(类似XML中的time)以及XmlQualifiedName(类似XML中的QName)。
枚举类型
比如: "public enum color { red=1, blue=2 }"
基础类型数组,枚举类型数组
上述类型的数组,比如 string[] 和 int[]
类和结构
带有公用域或属性的类和结构,公用域和属性是串行结构的。
类(结构)数组
上述类型的数组
DataSet(数据集) ADO.NET DataSet类型,可看成是类或结构中的字段。
DataSet数组
上述类型的数组
XmlNode
XmlNode是XML文档片断的内存表示,就好像一个轻量级的XML文档对象模型。比如说,
"" 就可以存储在一个XmlNode类型变量中。我们可以将XmlNodes作为参数传递,以SOAP
兼容方式附加到传递给Web Services的XML文档上。返回值也是同样原理。XmlNode也可
看成是类或结构中的字段。
XmlNode数组
上述类型的数组
返回值的数据类型
当通过SOAP或者HTTP GET/POST调用Web Services时,返回值可以是上述提到的任何一种
数据类型。
参数的数据类型
使用SOAP协议时,"通过值"以及"通过引用"这两种输入/输出参数形式都可被支持。如果
是"通过引用"的参数类型,就会产生两种方式的数据发送效果:到服务器的以及返回到
客户端的。但是,当通过HTTP GET/POST传递输入参数给Web Services时,就只支持有限
的数据类型了,而且还必须是"通过值"形式的参数。这些类型如下:
类 型
含 义
基础类型 (有限的)
支持大多数标准基础类型,包括: Int32、String、Int16、Int64、Boolean、Single
、Double、Decimal、DateTime、TimeSpan、UInt16、UInt32、UInt64和Currency。从客
户端来看,所有这些类型都转变为string。
枚举类型
比如: "public enum color { red=1, blue=2 }"。
基础类型数组,枚举类型数组
上述类型的数组,比如 string[]和int[]
数据类型应用举例
下面的例子利用WebServiceUtil.exe建立的SOAP代理来使用上面列出的数据类型。注意
:因为在.asmx文件中定义了多于一个的公用类,所以,我们必须要指定哪一个作为Web
Service类,这可以通过设置WebService标识的Class属性来实现,代码如下:
<%@ WebService Language="C#" Class="DataTypes" %>
请看看下面的例子:
DataTypes.asmx
[点击这里运行程序] | [查看源代码]
DataTypes.sdl
[点击这里运行程序]
从上例中我们看到:
· SayHello方法显示从service中返回的一个字符串信息。
· SayHelloName方法返回一个字符串,并接受一个字符串参数。
· GetIntArray方法显示了如何返回一个整数数组。
· GetMode方法返回一个枚举数值。
· GetOrder方法返回一个类。
· GetOrders方法返回定单对象数组。
对于使用客户端应用程序而言,使用WebServiceUtil代理生成工具配置这些数据类型是
透明的。请看关于上述Web Service的一个客户端例程:
DataTypesClient.aspx
结 语
以上通过一个简单例程讲述了.NET之ASP Web Services的概念及使用,并说明了WebSer
vices中的数据类型。我们看到了如何使用三种不同的编程语言达到目的。你会发现,我
们正在慢慢地触及.NET的神奇思想,领会.NET的震撼力量。我们有理由相信,凭借如此
强大的工具,开发人员将更具创造力! from:asp学习网/title:.NET之ASP Web Services 入门/ time:2007-6-18 10:52:20
本文主题Web Services
SQL Server 2005 自带的 Web Services SQL Server 2005 Native Web Services