欢迎光临
我们一直在努力

如何创建和使用Web服务-.NET教程,Web Service开发

建站超值云服务器,限时71元/月

简介

.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" %><br /> imports system.web.services<br /> imports system.data<br /> imports system.data.sqlclient<br /> imports system.configuration</p> <p> public class aspfaqs</p> <p> 创建私有功能方法getdataset<br /> private function getdataset(strsql as string) as dataset<br /> 1. 创建一个sqlconnection连接对象<br /> dim myconnection as new sqlconnection(connectionstring)</p> <p> 2. 创建command对象,传入sql参数<br /> dim mycommand as new sqlcommand(strsql, myconnection)</p> <p> myconnection.open()</p> <p> 3. 创建dataadapter对象<br /> dim mydataadapter as new sqldataadapter()<br /> mydataadapter.selectcommand = mycommand </p> <p> 4. 生成dataset并关闭连接<br /> dim mydataset as new dataset()<br /> mydataadapter.fill(mydataset)<br /> myconnection.close()</p> <p> 返回dataset<br /> return mydataset<br /> end function</p> <p> 创建实现实现三个任务的方法<br /> <webmethod()> public function getcategories() as dataset<br /> return getdataset(sql query) 这里的参数sql用来得到所有faq分类<br /> end function</p> <p> <webmethod()> public function getfaqsincategory(catid as integer) as dataset<br /> return getdataset(sql query) 这里的参数sql用来得到某分类(catid)的所有faq<br /> end function</p> <p> <webmethod()> public function getfaq(faqid as integer) as dataset<br /> return getdataset(sql query) 这里的参数sql用来得到某faq(faqid)的信息<br /> end function<br /> end 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内容&#8230;&#8230;<br /> <asp:datagrid id="dgcategoryfaqs" runat="server" /></p> <p> private sub page_load(sender as object, e as eventargs)<br /> 创建proxy类的实例<br /> dim consumewebservice as com._4guysfromrolla.aspnet.aspfaqs<br /> set consumewebservice = new com._4guysfromrolla.aspnet.aspfaqs</p> <p> 把getfaqsincategory结果绑定到dgcategoryfaqs<br /> dgcategoryfaqs.datasource = consumewebservice.getfaqsincategory(22)<br /> dgcategoryfaqs.databind()<br /> 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类也是非常简单的。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 如何创建和使用Web服务-.NET教程,Web Service开发
分享到: 更多 (0)

相关推荐

  • 暂无文章