接上篇文章,我们先简单解释下getsiteadata(string assignname)函数.
函数功能很简单,只是要返回查询结果,其数据格式是xmldatadocument.当查询失败时(无匹配查询结果),我们构造一个xml,返回一个空记录.否则,我们把查询后的dataset生成一个xmldatadocument,接下来,由于该项目的需要,我加入了一个循环,添加dataset里所没有的节点,站点名称.在这之后,算是完成了一个符合我们期望格式的xml数据文档,我们把它返回.
好了,webservice的方法函数介绍完了(这里还有个web服务方法,稍后介绍),接下来我们的任务是怎么调用它了.首先把webservice的项目编译完成,假定我们这个服务是针对资源站点a的,我们不妨称其为servicea.先单独运行asmx文件,执行getsiteadata(string assignname)方法,将提示你输入参数,你输入要搜索的内容,点确认,将返回给你一个xml数据,并在ie上显示出来,这就是你搜索到的内容拉.
这里对servicea的工作再做点介绍,在我们这个项目里,它是资源站点a提供的服务,意思是,它查询的数据将全来源于站点a,而站点a资源添加在本项目也有专门的工程实现.
好了,回到正题.这里我介绍vs调用webservice的方法,其实其他平台的调用方法也是大同小异.首先我们介绍web引用方式,这种方式我强烈建议调试时使用,非常方便.右击引用,点添加web引用,输入你的webservice地址,如:http://localhost/aspxproject/webservicesolution/sitebservice/service1.asmx,你必须保证你输入的webservice存在.然后引用即可,注意:web引用名将作为你加入的webservice的名字空间.比如你输入了:sitea,那服务的实例化将是这样:sitea.service1 servicea=new sitea.service1();(service1是服务的类名).
完成了这一步,service的调用似乎变的那么简单,我们已经实现了远程实例化,接下来的远程调用也是一样的容易.下面给出资源采集站servicegathersite的绑定代码(只采集a站点的信息)
//绑定数据
public void binddata()
{
servicea=new sitea.service1();
dataset ds=new dataset();
xmlnode xmlnode1;
xmldatadocument xd=new xmldatadocument();
stringbuilder xmlstring1;
xmlnode1=servicea.getsiteadata(strsearch);
if(xmlnode1==null) //–存储过程执行失败
return;
xmlstring1=new stringbuilder(xmlnode1.outerxml);
if(xmlstring1.tostring().equals(“<newdataset xmlns=\”\”></newdataset>”))
return ;
xd.loadxml(xmlstring1.tostring());
ds.readxml(new xmlnodereader(xd));
datagrid1.datasource=ds.tables[“list”].defaultview;
datagrid1.databind();
}
此段代码给出了xml转化成dataset的解决方案,虽然这不是必须的,但毕竟在asp.net里,dataset占的作用之重,谁都知道的.其他的请朋友们先看(呵呵,个中高手就免了),在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案,写了三篇了,发现似乎还是有些朋友看的,那我就献丑继续写下去好了,大家有什么意见也希望提出,在下的理解存在偏驳也再所难免,希望谅解:)
好了,时候不早了,休息去了,下次有时间继续:)
