最近参加的项目中,使用了WebService, 其中参数是自定义的
ActionForm类型,实际是一个由简单类型组成的属性集合。
返回值是自定义类型:ValueObject 。由于经验的原因,
ValueObject类型显得太复杂。为了返回数据库查询的结果集,
其中包含了一个或者多个DataSet。我们知道DataSet可以被
WebMethod返回没有问题,但是DataTable就不行了。
But...
一般来说,作为WebService的函数的参数还返回值应该尽量使用简单类型或者由简单类型组成的结构和数组,不要使用象DataSet这样的特定平台类库提供的复杂类型,因为这种情况通常其它语言和工具是无法处理的。
比如DataSet,缺省情况下生成的Xml会是一个非常奇怪的结构,包含一个XmlSchema定义了Table的结构,以及一个无特定规则Xml节点。即便Client工具能够帮你产生一个接受DataSet的结构,其验证和数据读去工作也要你自己去做。而且这种方式即使在Server端效率也很低。比较好的办法是把DataSet的Table定义成一个结构,然后返回该结构的一个数组,这基本上是任何语言和工具都能够正确处理的。