接上篇文章我们先简单解释下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/serviceasmx你必 须保证你输入的webservice存在然后引用即可注意web引用名将作为你加入的webservice的名字空间比如你输入了SiteA 那服务的实例化将是这样SiteAService serviceA=new SiteAService()(Service是服务的类名)
完成了这一步service的调用似乎变的那么简单我们已经实现了远程实例化接下来的远程调用也是一样的容易下面给出资源采集站ServiceGatherSite的绑定代码(只采集A站点的信息)
//绑定数据 public void BindData() { serviceA=new SiteAService(); DataSet ds=new DataSet(); XmlNode xmlNode; XmlDataDocument xd=new XmlDataDocument(); StringBuilder xmlString; xmlNode=serviceAGetSiteAData(strSearch); if(xmlNode==null) //存储过程执行失败 return; xmlString=new StringBuilder(xmlNodeOuterXml); if(xmlStringToString()Equals()) return ; xdLoadXml(xmlStringToString()); dsReadXml(new XmlNodeReader(xd)); DataGridDataSource=dsTables[list]DefaultView; DataGridDataBind(); }
此段代码给出了xml转化成dataset的解决方案虽然这不是必须的但毕竟在里dataset占的作用之重谁都知道的其他的请 朋友们先看(呵呵个中高手就免了)在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案写了三篇了发现似乎还是有些朋友看的那我就献 丑继续写下去好了大家有什么意见也希望提出在下的理解存在偏驳也再所难免希望谅解)
接上篇文章我们先简单说明下绑定函数首先实例化ServiceA这个和一般类的实例化并没有不同……接下来用xmlNode来接受函数的返回值接下来是构造xml并将其转化为dataset这是通用的方法如果是刚接触不久的朋友最好能记下这种方法
接下来给出异步调用两个服务的代码
//绑定数据 public void BindData() { IAsyncResult ar; IAsyncResult ar; serviceA=new SiteAService(); serviceB=new SiteBService(); DataSet ds=new DataSet(); XmlNode xmlNodexmlNode; XmlDataDocument xd=new XmlDataDocument(); StringBuilder xmlStringxmlString; //简单的异步调用 ar=serviceABeginGetSiteAData(strSearchnullnull); ar=serviceBBeginGetSiteAData(strSearchnullnull); xmlNode=serviceAEndGetSiteAData(ar); xmlNode=serviceBEndGetSiteAData(ar); // if(xmlNode==null&&xmlNode==null) //存储过程执行失败 return; xmlString=new StringBuilder(xmlNodeOuterXml); xmlString=new StringBuilder(xmlNodeOuterXml); xmlString=MakeNewXmlString(xmlStringxmlString); //生成新的xml if(xmlStringToString()Equals()) return ; xdLoadXml(xmlStringToString()); dsReadXml(new XmlNodeReader(xd)); DataGridDataSource=dsTables[list]DefaultView; DataGridDataBind(); } //生成新XML public StringBuilder MakeNewXmlString(StringBuilder strStringBuilder str) { str=strReplace(); str=strReplace(); strAppend(strToString()); return str; }
这有两个需要注意的地方一个是xml构造还有就是异步调用的实现请读者自己理解
下面讲下通过dll来引用webservice的方法我只把流程介绍下
首先在ie输入服务的地址如
然后写输入?wsdl
打开后另存为xxxwsdl
然后用vs的命令提示符来编译wsdl /namespaceSiteA ServiceAwsdl
生成名字空间为sitea的代理类
最后csc /outServiceAdll /tlibrary Servicecs 其中servicecs为代理类文件
最后引用dll就可以了