详细介绍VS2003 WebService的相关介绍与注意事宜
创始人
2024-06-13 05:20:15
0次

假若我们是服务端,我们写好了个VS2003 WebService,然后把它给了客户,客户就可以在从VS2003 WebService获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据。

这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定asp.net基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.

细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足 条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以xml数据的传输来示例.

接上篇文章,我们先简单解释下GetSiteAData(string AssignName)函数.#t#

函数功能很简单,只是要返回查询结果,其数据格式是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站点的信息)

以下是引用片段:

  1. public void BindData()   
  2. {   
  3. serviceA=new SiteA.Service1();   
  4. DataSet ds=new DataSet();   
  5. XmlNode xmlNode1;   
  6. XmlDataDocument xd=new XmlDataDocument();   
  7. StringBuilder xmlString1;   
  8. xmlNode1=serviceA.GetSiteAData(strSearch);   
  9. if(xmlNode1==null) //--存储过程执行失败   
  10. return;   
  11. xmlString1=new StringBuilder(xmlNode1.OuterXml);   
  12. if(xmlString1.ToString().Equals(""))   
  13. return ;   
  14. xd.LoadXml(xmlString1.ToString());   
  15. ds.ReadXml(new XmlNodeReader(xd));   
  16. DataGrid1.DataSource=ds.Tables["list"].DefaultView;   
  17. DataGrid1.DataBind();   
  18. }  

此段代码给出了xml转化成dataset的解决方案,虽然这不是必须的,但毕竟在asp.net里,dataset占的作用之重,谁都知道的.其他的请 朋友们先看(呵呵,个中高手就免了),在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案,写了三篇了,发现似乎还是有些朋友看的,那我就献 丑继续写下去好了,大家有什么意见也希望提出,在下的理解存在偏驳也再所难免,希望谅解:)

接上篇文章,我们先简单说明下绑定函数.首先实例化ServiceA,这个和一般类的实例化并没有不同..接下来用xmlNode1来接受函数的返回值,接下来是构造xml,并将其转化为dataset,这是通用的方法,如果是刚接触不久的朋友,最好能记下这种方法.接下来给出异步调用两个服务的代码:

  1. public void BindData()   
  2. {   
  3. IAsyncResult ar1;   
  4. IAsyncResult ar2;   
  5. serviceA=new SiteA.Service1();   
  6. serviceB=new SiteB.Service1();   
  7. DataSet ds=new DataSet();   
  8. XmlNode xmlNode1,xmlNode2;   
  9. XmlDataDocument xd=new XmlDataDocument();   
  10. StringBuilder xmlString1,xmlString2;   
  11. ar1=serviceA.BeginGetSiteAData(strSearch,null,null);   
  12. ar2=serviceB.BeginGetSiteAData(strSearch,null,null);   
  13. xmlNode1=serviceA.EndGetSiteAData(ar1);   
  14. xmlNode2=serviceB.EndGetSiteAData(ar2);   
  15. if(xmlNode1==null&&xmlNode2==null)  
  16. xmlString1=new StringBuilder(xmlNode1.OuterXml);   
  17. xmlString2=new StringBuilder(xmlNode2.OuterXml);   
  18. xmlString1=MakeNewXmlString(xmlString1,xmlString2);   
  19. if(xmlString1.ToString().Equals(""))   
  20. return ;   
  21. xd.LoadXml(xmlString1.ToString());   
  22. ds.ReadXml(new XmlNodeReader(xd));   
  23. DataGrid1.DataSource=ds.Tables["list"].DefaultView;   
  24. DataGrid1.DataBind();   
  25. }   
  26. public StringBuilder MakeNewXmlString(StringBuilder str1,StringBuilder str2)   
  27. {   
  28. str1str1=str1.Replace("","");   
  29. str2str2=str2.Replace("","");   
  30. str1.Append(str2.ToString());   
  31. return str1;   
  32. }  

此段代码给出了xml转化成dataset的解决方案,虽然这不是必须的,但毕竟在asp.net里,dataset占的作用之重,谁都知道的.其他的请 朋友们先看(呵呵,个中高手就免了),在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案,写了三篇了,发现似乎还是有些朋友看的,那我就献 丑继续写下去好了,大家有什么意见也希望提出,在下的理解存在偏驳也再所难免,希望谅解:)

接上篇文章,我们先简单说明下绑定函数.首先实例化ServiceA,这个和一般类的实例化并没有不同..接下来用xmlNode1来接受函数的返回值,接下来是构造xml,并将其转化为dataset,这是通用的方法,如果是刚接触不久的朋友,最好能记下这种方法。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...