java 访问.net webservice返回的数据集

发布时间:2021-10-20 01:45:15

【转:http://www.pcppc.cn/biancheng/JNet/biancheng_108859_2.html】


您正在看的J#.NET教程是:调用.NET XML Web Services返回数据集合一。
  1. 概述
  
  很多正在开发或者打算开发XML Web Services的程序员都问过这样的一个问题:"我的Web Service返回的结果是一个DataSet类型的对象,但如果我的客户端不是用.NET写的(因而没有内建的DataSet类型),那该如何调用这个Web Service并访问DataSet中的数据呢?"。
  
  对于这个问题,首先应该说的是:1)在多种语言共存的编程环境下,是不适合使用类似DataSet这种只属于特定语言的数据类型的。不管是在XML Web Services还是CORBA的环境中,都应该尽量使用简单数据类型以及简单数据类型的数组。2)应当很谨慎的决定是否需要通过Web Service来返回大量数据。由于网络传输的开销既包括HTTP连接建立的时间,也包括传送数据的时间,因此需要在减少访问服务器次数和减少网络传输量之间寻找一个合适的*衡。如非必须,则不适合通过Web Service传送含有几十条或者几百条数据的数据表。
  
  然后,就问题本身而言,.NET Web Services返回的DataSet类型是可以直接被其他非.NET的客户端解析的,因为即便是DataSet类型的返回值,也会被表达成XML格式再进行传输。下面的例子就是一个返回类型为DataSet的Web Method,及其被调用后返回的XML格式数据:
  
  表1. 返回类型为DataSet的Web Method
  [WebMethod]
  public DataSet GetPersonData()
  {
  DataTable table=new DataTable("Person");
  table.Columns.Add("Name");
  table.Columns.Add("Gender");
  table.Rows.Add(new string[2]{"Alice","Female"});
  table.Rows.Add(new string[2]{"Bob","Male"});
  table.Rows.Add(new string[2]{"Chris","Male"});
  
  DataSet dataset=new DataSet("PersonTable");
  dataset.Tables.Add(table);
  return dataset;
  }
  
  表2. 被格式化成XML的DataSet
  
  
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  
  
  
  
  
  
  
  
  

  

  

  

  

  

  

    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  
  
  Alice
  Female
  

  
  Bob
  Male
  

  
  Chris
  Male
  

  

  

  

  
  从上面的例子可以看出,直接使用DataSet作为返回类型,其结果是相当复杂的,其中不但包含了DataSet中的数据,还包括了数据更改的信息,以及DataSet的Schema。虽然有些工具能够生成一个类似DataSet的客户端类型,但无论是直接解析复杂的XML还是使用类似DataSet的类,都不够直接不够清晰。
  
  解决这个问题的方案有两种:
  
  1) 用简单数据类型构造自定义类型,用每一个自定义类型对象封装数据集中的一行,将自定义类型对象的数组(Array)返回客户端;由于是用简单数据类型定义,客户端能够完全不变的还原出自定义类型的定义;
  
  2) 用DataSet.WriteXML()方法将数据集中的数据提取成XML格式,并以字符串的形式返回给客户端,再由客户端解析XML字符串,还原出数据。由于使用WriteXML()的时候能够过滤掉冗余信息,返回的内容和图表2中的内容相比大大简化了。
  
  2. 创建.NET Web Services,返回数据集合
  
  借助于Visual Studio.NET,只需编写Web Method本身的代码,即可非常快速的创建可以实用的Web Services:
  
  表3. 用.NET实现的XML Web Services
  [WebMethod]
  public Person[] GetPersons()
  {
  Person Alice=new Person("Alice","Female");
  Person Bob=new Person("Bob","Male");
  Person Chris=new Person("Chris","Female");
  Person Dennis=new Person("Dennis","Male");
  
  return new Person[]{Alice,Bob,Chris,Dennis};
  }
  
  [WebMethod]
  public string GetPersonTable()
  {
  DataTable table=new DataTable("Person");
  table.Columns.Add("Name");
  table.Columns.Add("Gender");
  table.Rows.Add(new string[2]{"Alice","Female"});
  table.Rows.Add(new string[2]{"Bob","Male"});
  table.Rows.Add(new string[2]{"Chris","Female"});
  table.Rows.Add(new string[2]{"Dennis","Male"});
  table.Rows.Add(new string[2]{"Eric","Male"});
  
  DataSet dataset=new DataSet("PersonTable");
  dataset.Tables.Add(table);
  
  System.Text.StringBuilder strbuilder=new System.Text.StringBuilder();
  StringWriter writer=new StringWriter(strbuilder);
  dataset.WriteXml(writer,System.Data.XmlWriteMode.IgnoreSchema);
  
  return strbuilder.ToString();
  }
  
  在上面的代码中,函数GetPersons()和GetPersonTable()分别对应于"1. 概述"中所提到的两种解决方案。其中,Person类型就是用于封装数据集中一行数据的自定义的数据类型:
  
  表4. 自定义类型Person
  [Serializable]
  public class Person
  {
  public Person()
  {
  }
  
  public Person(string name,string gender)
  {
  this.Name=name;
  this.Gender=gender;
  }
  
  public string Name="";
  public string Gender="";
  }

相关文档

  • 梦见搬家收拾东西什么意思
  • 2016自考《教育经济学》专项练习题及答案
  • Mac技巧??自带计算器的隐藏功能
  • 感动的泪作文
  • 六盘水周边自驾游路线攻略
  • 英国调查:有1/3的电话是坐在马桶上接的
  • 内置锁(一)--- synchronized 介绍与用法
  • 财务经理月度工作总结
  • 是否放心把自己的房子长期租给链家自如等平台?
  • 百度内部发文称作为一家优秀的企业要背负责任
  • 路旁的橡树讲的是什么故事
  • 部署docker+consul+consul-Template+Registrator自动发现容器服务实现高可用集群负载均衡
  • 班务期末工作总结
  • 童年追忆
  • HTML中小meta的大作用
  • 瓜娃子的回敬语是啥
  • 苹果x设置壁纸怎么缩小
  • 金融类毕业论文范文
  • sql server 2005 Express 下载
  • 蒙脱石散可以和奶粉一起吃吗?吃完蒙脱石散能喝水吗?
  • 输开头的成语接龙怎么做
  • 挥着翅膀的女孩
  • 哎,我这个人呀!
  • 趣味运动会小学作文400字范文
  • 借款合同的反担保书范文
  • 梦见下小雨是什么意思
  • 书社总编辑竞聘演讲稿
  • 六年级上学期期中考试作文
  • 幼儿园小班教案《毛豆朋友》含反思
  • 各种水果富含的营养什么水果营养最高
  • 猜你喜欢

  • 2011届高三历史上册期末模块考试试卷3
  • 湖南省益阳市箴言中学高一下学期6月月考试题语文Word版含答案
  • 醋是它们“3种”植株的最爱,一次来上斤,根系茁壮,黄叶远离!
  • 食品区域终端销售工作总结精选
  • 人体组织学与胚胎学ppt课件
  • 小学英语课件 Garden in a Bottle
  • 济南润泽医疗器械有限公司企业信用报告-天眼查
  • 2011法律顾问考试民商法讲义-第03讲讲义
  • 2011年中国电脑蒸汽房行业市场调研报告
  • 吃什么中药可以养肝护肝排毒秘诀
  • 周口方言儿化初探
  • 电力系统接地防雷保护-PPT课件
  • 2013年两会热点 Microsoft Word 文档
  • 穷小子帮助了美女面试时公司老总直接被录取的电视剧
  • springBoot 动态注入bean(bean的注入时机)
  • 阿玛尼405多少钱阿玛尼405价格
  • 2018-2019年和龙市西山小学校三年级上册科学模拟复习题无答案
  • 漳州双语实验学校普通高中课程标准实验教科书地理必修1第五章自然地理的整体性与差异性123
  • 小学秋季运动会作文400字
  • Factors of Factorial(AtCoder-2286)
  • 让人性自由舒展——解读王安忆文学创作中对中国传统文化的解构与反拨
  • 中学教师产假请假条范文格式--word范文资料
  • 2016湖北公务员申论备考:申论公文写作之解说词
  • 清河县金丰种子有限公司企业信用报告-天眼查
  • 14-01设计文件会审记录表
  • 公司员工考勤及假期管理制度
  • XX年肿瘤科护士工作总结
  • 人教新起点英语二年级下册 同步练* Unit 3 Lesson 3
  • 总结的一些iOS App审核被拒的经历.
  • 空调压缩机三根线分别代表什么线
  • 看美丽的日全食
  • 向领导认错检讨书
  • 最新北师版八年级数学上册1.2 一定是直角三角形吗 课堂练习
  • 学生探索能力的培养和智力的发展
  • 学生探索能力的培养和智力的发展
  • vivo怎么改手机型号
  • 预应力张拉施工控制要点
  • 大学生军训个人总结200字-军事训练考核个人总结
  • LaTeX常用的数学符号
  • 2008 国有企业法律顾问职业岗位等级资格评审管理暂行办法
  • 以发现为话题的优秀作文10篇.doc
  • 夏天注意安全行车
  • 电脑版