XML WebService完全实例详细解析
XML WebService完全详解先告诉我们了解什么是webservice,webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论xml数据的传输.
| [WebMethod(Description="查询以获取需要的课件信息")] public XmlDataDocument GetSiteAData(string AssignName) { XmlDataDocument xd=new XmlDataDocument(); // DataSet ds=new DataSet(); CStoreProc cp=new CStoreProc("SearchAssign"); cp.AddParIn("@keywords",SqlDbType.VarChar,30,AssignName); cp.AddParOut("@res",SqlDbType.Int); if(cp.SelectProc()) //如果执行成功,存储过程 { cp.myData.EnforceConstraints=false; //不进行格式严格检查 if((int)cp.GetReturnValue("@res")==-1) { string xml=""; xd.LoadXml(xml); return xd; } xd=new XmlDataDocument(cp.myData); XmlNode root1=xd.DocumentElement; XmlNodeList roots=root1.SelectNodes("list"); foreach(XmlNode roota in roots) //为所有元素加上站点名称标记 { XmlElement Link=xd.CreateElement("SiteName"); Link.InnerText=ConfigurationSettings.AppSettings["SiteName"].ToString(); roota.AppendChild(Link); } return xd; } else return null; } |
这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定asp.net基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.
细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足 条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以xml数据的传输来示例.
接上篇文章,我们先简单解释下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是服务的类名).
- 本文关键词:

