![]() 李凌宇|2002-3-4 -------------------------------------------------------------------------------- 随着微软visual studo.net beta版的发布,由于visual studio.net对xml连同web服务的强大支持,利用visual studio.net研发web服务应用将会越来越多而且是很的方便。本文以一个b2b电子商务网站为例,介绍利用web服务在不同站点间共享同一数据库的具体方法和步骤。本文中,客户端是指使用web服务的一方,服务器端是指提供web服务的另一方。 问题的提出 该网站是一家(简称a)从事网上销售手机sim卡的业务的电子商务网站。前不久,该网站和另一家网站(简称b)合作,一起开展网上销售联通手机sim卡业务。由于都是使用的a网站的号码资源,存取的都是a网站的数据库,于是笔者利用webservice技术为另一家网站研发了网上售卡系统。 各主要功能的模块和关键代码 1. 数据库采用sql server2000,使用存储过程实现号码浏览的分页显示。代码如下: create procedure fenye ( @pagenow int, @pagesize int, @cityid int, @code char(3), @recordcount int output ) as set nocount on declare @allid int,@beginid int,@endid int,@pagebegin char(11),@pageend char(11) select @allid=count(*) from jinan where cityid=@cityid and (code like @code+%) select @recordcount=@allid declare cur_fastread cursor scroll for select code from jinan where cityid=@cityid and (code like @code+%) order by code open cur_fastread select @beginid=(@pagenow-1)*@pagesize+1 select @endid=@beginid+@pagesize-1 fetch absolute @beginid from cur_fastread into @pagebegin if @endid>@allid fetch last from cur_fastread into @pageend else fetch absolute @endid from cur_fastread into @pageend set nocount off select code,cost,status from jinan join xuanhaofei on jinan.category=xuanhaofei.category and jinan.cityid=xuanhaofei.cityid where code between @pagebegin and @pageend order by code close cur_fastread deallocate cur_fastread go 2. 用visual studio.net创建webservice。在visual studo.net中,webservice文档的扩展名是.asmx。该文档放在a网站上,供其他网站调用。 * 启动visual studio.net,选择new project。 * 在左面版中选择visual c# projects,在右面版中选择asp.net webservice。 * 单击ok按钮就生成了一个webservice项目。在项目中新建一个webservice文档,webservice1.asmx。该文档实现对数据库的存取,并对调用者输出一个字符串。 下面是该文档的代码: webservice1.asmx.cs using system; using system.collections; using system.componentmodel; using system.data; using system.data.sqlclient; using system.configuration; using system.text; using system.diagnostics; using system.web; using system.web.services; namespace webservice1 { public class service2 : system.web.services.webservice { sqlconnection con; public service2() { //codegen: this call is required by the asp.net web services designer initializecomponent(); } [webmethod] //[webmethod]属性声明此方法作为web服务能够被远程使用者调用 public string table(int pagenow,int cityid) { int recordcount;//总号码数 int page=0;//总页数 int j=0; sqldatareader d=getcode(pagenow,cityid,out recordcount); if(recordcount%39==0) { page=recordcount/39;//每页只显示39个号码 } else { page=recordcount/39+1; } stringbuilder str=new stringbuilder("
"); if(pagenow==1) { str.append("首页 上一页 "); } else { str.append("首页 "); str.append(" str.append(pagenow-1); str.append(")>上一页 "); } if(pagenow==page) { str.append("下一页 尾页"); } else { str.append(" str.append(pagenow+1); str.append(")>下一页 str.append(page); str.append(")>尾页"); } str.append(" 页次:"); str.append(pagenow); str.append("/"); str.append(page); str.append("页"); str.append(" 共"); str.append(recordcount); str.append("个号码 39个号码/页"); return str.tostring(); } private sqldatareader getcode(int pagenow,int cityid,out int recordcount) { sqldatareader dr=null; con=new sqlconnection("server=localhost;database=yitong;uid=sa;pwd="); sqlcommand cmd=new sqlcommand("fenye",con); cmd.commandtype=commandtype.storedprocedure; cmd.parameters.add(new sqlparameter("@pagenow",sqldbtype.int)); cmd.parameters["@pagenow"].value=pagenow;//现在所在页面 cmd.parameters.add(new sqlparameter("@pagesize",sqldbtype.int)); cmd.parameters["@pagesize"].value=39;//每页要显示的号码数 cmd.parameters.add(new sqlparameter("@cityid",sqldbtype.int)); cmd.parameters["@cityid"].value=cityid;//城市代码 cmd.parameters.add(new sqlparameter("@code",sqldbtype.char,3)); cmd.parameters["@code"].value="130";//只搜索联通的手机号码 sqlparameter q; q=cmd.parameters.add(new sqlparameter("@recordcount",sqldbtype.int)); q.direction=parameterdirection.output; con.open(); cmd.executenonquery(); recordcount=(int)cmd.parameters["@recordcount"].value;//返回的号码总数 dr=cmd.executereader(); return dr; } } } 3. 客户端页面存放在b网站上。当客户浏览该网站时,通过该页面能够浏览、订购a网站数据库中号码。客户端页面使用微软的webservice behavior技术调用a上的web服务。webservice behavior是微软在ie5.0中新增加的一项能够通过页面脚本使用web服务的技术。她使用soap协议和web服务通讯,能够动态更新页面的局部,而不刷新整个页面,较之通常使用的整页刷新的方法,他更快也更有效。要使用这项技术,须从微软网站上下载一个webservice.htc组件到客户端页面所在的目录下。 客户端页面的代码如下: client.htm 能够看到,webservice behavior能够使一个静态页面通过脚本程式使用web服务,而且不用在客户端建立代理,只要拷贝一个webservice.htc组件就能够了。 利用visual studio.net,您能够不必了解http、xml、soap、wsdl等底层协议,同样能研发和使用web服务,真得是好爽。 |
喜欢本文,那就收藏到: |