asp学习网: 首页 >> asp.net >> .NET之ASP Web Services 入门

.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

XML Web Services Security

SQL Server 2005 自带的 Web Services SQL Server 2005 Native Web Services

asp教程 ©2006-2007 aspxuexi.com | 关于站点 | 版权隐私 | 站内搜索
复制或者翻版 请于夜间进行