如何创建和使用Web服务

web|web服务|创建

简介

.NET最强大的一个方面之一就是可以利用它创建Web服务。一个Web服务就是一个网站所提供的供其它网站调用的外部接口。举个例子来说,某个金融公司可以为与它的贸易伙伴通过Web服务提供详细的股票报价,这些信息可以是通过Web页面进行读取和显示的,也可以是从客户的桌面电脑的应用程序里读取的。

本文就对Web服务的其中两个方面进行说明:一是如何创建Web服务;二是如何使用Web服务。作为例子,我们以来自ASPFAQs.com(http://www.aspfaqs.com/aspfaqs/)的FAQS(常见问题解答)的Web服务来解释如何创建一个Web服务。

创建Web服务

在你创建一个Web服务之前,你首先必须问问自己:“我要向我的用户提供什么服务?”。本文的目标就是创建这样一个Web服务:让其它的用户在他们自己的网站上显示来自ASPFAQs.com的常见问题解答(FAQS)的列表。比较理想的功能是限制其他的网站只能够查看FAQS分类和按分类排列的FAQS,如果你想查看一个问题的答案,就让用户去访问提供服务的网站http://www.aspfaqs.com。本文例子的Web服务最终向其他网站提供如下的功能:

1,浏览所有FAQ分类的列表
2,浏览某一分类里的所有FAQS。
3,浏览某一个FAQ的问题,但不包含答案。
创建一个Web服务是很简单的,首先创建一个.asmx文件(你可以用Visual Studio .NET或你自己喜欢的任何文本编辑器,推荐使用Web Matrix,它有创建Web服务的模板),Web服务作为一个普通的类进行创建,在方法的前面有一个宏,表明这个方法是通过Web服务来访问的。

就ASPFAQS.com的Web服务来说,首先创建三个通过Web服务访问的方法,GetCategories, GetFAQsInCategory和GetFAQ,分别实现上面提出的任务1,2,3。并创建一个私有方法GetDataSet,按传递过来的SQL查询组装成一个DataSet。下面就是实现的代码:

<%@ WebService Language="VB" Class="ASPFAQs" %>Imports System.Web.ServicesImports System.DataImports System.Data.SqlClientImports System.ConfigurationPublic Class ASPFAQs ' 创建私有功能方法GetDataSet Private Function GetDataSet(strSQL as String) as DataSet '1. 创建一个SqlConnection连接对象 Dim myConnection as New SqlConnection(ConnectionString) '2. 创建COMMAND对象,传入SQL参数 Dim myCommand as New SqlCommand(strSQL, myConnection) myConnection.Open() '3. 创建DataAdapter对象 Dim myDataAdapter as New SqlDataAdapter() myDataAdapter.SelectCommand = myCommand '4. 生成DataSet并关闭连接 Dim myDataSet as New DataSet() myDataAdapter.Fill(myDataSet) myConnection.Close() '返回DataSet Return myDataSet End Function ' 创建实现实现三个任务的方法 Public Function GetCategories() as DataSet Return GetDataSet(SQL Query) '这里的参数SQL用来得到所有FAQ分类 End Function Public Function GetFAQsInCategory(catID as Integer) as DataSet Return GetDataSet(SQL Query) '这里的参数SQL用来得到某分类(catID)的所有FAQ End Function Public Function GetFAQ(FAQID as Integer) as DataSet Return GetDataSet(SQL Query) '这里的参数SQL用来得到某FAQ(FAQID)的信息 End FunctionEnd Class
正如前面所说的那样,三个通过Web服务访问的方法都有前导符,在.asmx文件的第一行有一个@WebService标明所使用的语言和类名。这个Web服务名为ASPFAQs,和类同名。一旦创建好了.asmx文件,就把它保存到可通过Web访问的目录下,然后就可以通过Web浏览器进行访问。例如:假如Web服务文件名字是ASPFAQs.asmx,并保存到/WS目录下,这样任何人就可以通过http://aspnet.4guysfromrolla.com/WS/ASPFAQs.asmx进行访问,就可以看到Web服务使用的所有公共方法,你还可以提供输入参数看到返回的结果。

需要说明的是:你在进行需要参数的Web服务的方法的调用时,不必担心传入参数的类型是否正确,Web服务代码会自动确保传入参数类型的正确性,在上面的例子中参数类型为整型,如果恶意的用户企图向Web服务传入象0 'malicious SQL statement这样的参数,就会返回错误的信息:annot convert 0 'malicious SQL to System.Int32. Parameter name: type --> Input string was not in a correct format。然而,如果你传入字符串类型的参数,你应当记住把单个撇号(’)替换成两个连续的撇号('')。

使用Web服务

上面,我们创建了Web服务,下面就看看别的网站如何使用这个Web服务。为了方便起见,我们把使用Web服务的客户网站叫做“消费者”,把提供Web服务网站就“生产者”。最本质的东西就是消费者必须知道要调用生产者的什么方法。如果需要参数的话,这些参数必须转换成XML格式进行传入,消费者向生产者发送HTTP请求,并指明要调用的方法和参数,参数可以是通过QueryString形式的SOAP请求或者是以POST的请求头的形式进行传递。

生产者收到发送过来的请求后,对输入参数进行解包,并调用指定类的适当的方法。如果调用完成,就把结果返回,进行打包,然后发送回消费者。消费者收到响应结果,进行解包,就完成了Web服务的调用。

很明显,其实我们在使用Web服务时一点也不用担心发送的HTTP信息的语义,为了达到这样的目的,我们可以使用一个叫做Proxy的类,Proxy的作用是充当消费者应用程序或Web页面和生产者实际Web服务之间的中间过程。对生产者Web服务的每一个方法来说,同时也在Proxy类里有一个相同的方法,Proxy的职责就是处理所有传送的复杂消息,这种复杂性在Proxy类里被隐藏起来的,我们只需要简单地调用该类的方法即可,不必关心语义的事情。

此时你也许很迷惑,但这种迷惑也是可以理解的,这本身就是一个很令人迷惑的话题。要理解的最基本的事情就是:当调用Web服务时消费者和生产者之间的HTTP通信可能是复杂的,而且可能会需要编写不少的代码。我们更愿意看到的是,使用Web服务的页面调用Web服务时就象使用一个本地的组件一样方便,为了实现这一目标,我们使用Proxy类,它的公用接口与Web服务的方法相对应。如果你此时还感到迷惑的话,请看看这个演示文档http://aspnet.4guysfromrolla.com/code/ConsumeWS.ppt,它将向你解释如何使用Web服务。

利用Visual Studio .NET创建Proxy类

在Visual Studio .NET里创建Web服务使用的Proxy类是件轻而易举的事情,在ASP.NET Web项目里,在“引用”上单击右键,选择“添加Web引用”,这时会弹出一个对话框,要你输入一个URL地址,请输入http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx,然后你就会看到这个Web服务的描述(就象你在Web浏览器里直接看到的那样),最后单击“添加引用”按钮,Visual Studio .NET会自动为你创建一个Proxy类,并且进行编译。当你把它添加进你的工程里时,Proxy类的名称空间可能就是你的网站地址,比如:com.4guysfromrolla.aspnet,当然你还可以任意改成其他的任何名字。从你的Web页面里通过Proxy类调用Web服务就象你使用本地组件进行调用一样方便。假设你想显示ASP.NET类别(category ID为22)FAQS的列表,我们可以通过调用Web服务的GetFAQsInCategory方法,在参数里传入22,并把返回的DataSet绑定到一个DataGrid,代码可能象如下的写法那样:

'.aspx 页面中的其他HTML内容......Private Sub Page_Load(sender as Object, e as EventArgs) '创建Proxy类的实例 Dim consumeWebService as com._4guysfromrolla.aspnet.ASPFAQs Set consumeWebService = New com._4guysfromrolla.aspnet.ASPFAQs '把GetFAQsInCategory结果绑定到dgCategoryFAQs dgCategoryFAQs.DataSource = consumeWebService.GetFAQsInCategory(22) dgCategoryFAQs.DataBind()End Sub
检查一下上面的代码,你可能不明白对com._4guysfromrolla.aspnet.ASPFAQs Proxy类的调用实际上就是远程Web服务的调用,当调用Proxy类的GetFAQsInCategory方法时,会进行复杂的数据通讯(HTTP的请求/响应)。

结论

在本文里,我们讲述了如何创建Web服务,并如何在ASP.NET页面里使用它。微软公司实际上在.NET里已经简化了创建和使用Web服务的过程。创建一个Web服务简单到只需创建.asmx文件,然后为Web服务的方法写一点代码,并添加宏,那些代码看上去就和本地组件代码一样。使用Web服务也是很简单,这还要归功于Proxy类的使用。如前所述,利用诸如Visual Studio .NET那样的工具来创建一个Proxy类也是非常简单的。

时间: 2024-12-23 18:48:41

如何创建和使用Web服务的相关文章

用ASP.NET创建管理XML WEB服务全接触

asp.net|web|web服务|xml|创建 Internet的发展已经用它超乎想象的力量重新规划了应用程序开发领域.公司和机构越来越依赖因特网和有关技术提供的数字资源和通讯渠道.因而,现在设计和开发的应用程序很少不考虑如何最好的整合和运用Internet技术.在应用程序中整合Internet技术成为业界对开发技术的提出的新的要求.微软适时提出的以XML为基础的Web服务满足了这种需求,本期专题我将向大家介绍利用ASP.NET的创建和管理XML WEB服务的过程. 概述 XML Web服务是

在C++中创建并使用Web服务

Web服务的确是.net中让人激动的部分--但它们本身比.net要大.其中的道理很简单.几乎所有你能叫出名字的服务都有一些执行服务器端代码的机制:你在浏览器的地址栏中输入一个URL:接收到你的请求,服务器上就开始运行什么东西,然后以html页面返回你要的结果.它可能是ASP,ASP.NET,Servlets,甚至是五年前通过CGI触发的Perl本.因此想象一下,如果运行代码返回的是XML格式而非HTML格式的结果,并且服务请求并非是在浏览器地址栏中输入的url,而是某些代码中以HTTP中的GET

ASP.NET创建Web服务之使用事务

asp.net|web|web服务|创建 支持XML Web服务的事务利用公共语言运行期中的支持,其是基于Microsoft Transaction Server ( MTS)和COM+ Services中相同的分布式事务模型.该模型基于明确的判断一个对象是否参与一个事务,而不是编写特定的代码用来处理委托和回调一个事务.对于一个使用ASP.NET创建的XML Web服务,你可以通过设置其应用到一个XML Web服务方法上的WebMethod属性的TransactionOption属性来声明一个X

ASP.NET创建Web服务之异步Web服务

asp.net|web|web服务|创建|异步 为了改善调用阻碍线程的长期运行的方法的XML Web服务方法的性能,你应该考虑把它们作为异步的XML Web服务方法发布.实现一个异步XML Web服务方法允许线程在返回线程池的时候执行其他的代码.这允许增加一个线程池中的有限数目的线程,这样提高了整体性能和系统的可伸缩性. 通常,调用执行输入/输出操作的方法的XML Web服务方法适于作为异步实现.这样的方法的例子包括和其他的XML Web服务通讯.访问远程数据库.执行网络输入/输出和读写大文件方

ASP.NET创建Web服务之发布和部署

asp.net|web|web服务|创建 部署一个XML Web服务包括复制.asmx文件和任何XML Web服务使用的汇编文件,而不要把Microsoft.NET Framework的一部分作为Web服务器上的虚拟目录.有关如何部署一个XML Web服务的信息,请参见"部署XML Web服务".XML Web服务对使用发现机制的用户适用.用户可以浏览一个特殊的发现文件或Web服务器的根来定位发现文件.从这些文件中,他们可以判断那些服务对他们来说有用. 部署XML Web服务 部署一个

ASP.NET创建Web服务之设计方针

asp.net|web|web服务|创建|设计 使用ASP.NET构造一个简单的XML Web服务是相对容易的,然而,XML Web服务的真正的强大的功能只有等你研究了基础结构以后才能领悟.XML Web服务是建立在.NET框架和公共语言运行时间基础上的.一个XML Web服务可以利用这些技术.例如,ASP.NET支持的性能.状态管理和验证全都可被用来构造XML Web服务. XML Web服务的基础结构是构建来符合象SOAP.XML和WSDL这样的行业标准,并且它允许其他的平台的客户端与XML

ASP.NET创建Web服务之声明

asp.net|web|web服务|创建 声明一个XML Web服务 当你使用ASP.NET创建一个XML Web服务时,你要把所需的@_WebService指令放到.asmx文件的最顶端..asmx文件的存在和@_ WebService指令与所实现的XML Web服务的URL地址相关.接下来,你实现XML Web服务类来定义XML Web服务客户端可见的方法和数据类型.最后,你把你的XML Web服务逻辑添加到那些方法上,以便处理XML Web服务请求和返回的响应.你定义的XML Web服务类

手把手教你在.NET中创建Web服务实现方法

 这篇文章主要介绍了.NET中创建Web服务实现方法,有需要的朋友可以参考一下 最近发现在.NET平台下使用Web服务还是很简单的. 下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如下: 代码如下: using System; using System.Collections; using System.ComponentModel; using System.Data; using System

手把手教你在.NET中创建Web服务实现方法_实用技巧

最近发现在.NET平台下使用Web服务还是很简单的.下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如下: 复制代码 代码如下: using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using Syst