此次项目开发,我们使用了Weborb作为客户端Flash程序与服务器端通信的网关,项目进展到目前,出现了一个令人郁闷的错误,看似是Weborb的一个Bug,但还不确定。到目前为止没有联系官方进行咨询,虽然有此打算。
在项目中我们使用了DataSet作为服务端返回数据的集合,突然出现了“提供的索引超出范围”异常,见图:
点击继续,出现如下错误信息:
[FaultEvent fault=[RPC Fault faultString="Didn't receive an acknowledge message" faultCode="Server.Acknowledge.Failed" faultDetail="Was expecting mx.messaging.messages.AcknowledgeMessage, but received null"] messageId="1776CDB0-D522-BEFE-A7A8-096E1C43E55F" type="fault" bubbles=false cancelable=true eventPhase=2]
经过辛苦的排查,最终确定了DataSet传输的数据大小有关,这个数据大小容我详细说明一下。
首先来测试一下,我们用SELECT getdate()来测试。第一次正常,然后,我们一步一步增加getdate()数量,增加到一定程度,就出现了上面图片中的错误。当然,你也可以用一个字段多的表来进行测试。在此我判断,使用DataSet,当查询出来的字段数据累加的长度超过一定限度时就出现上图的错误。这个限度是多少,我没测试。但令人纳闷的是,在出现上图错误的情况下,我们换DataTable来传输数据,就没什么问题。.NET的DataSet、DataTable通过Weborb格式化后对应ActionScript的Object,Arrary类型。
关于DataSet为何会出现这种情况,我也没分析出个所以然来,只能判断这是Weborb的一个Bug了。哪位仁兄碰到过,欢迎交流。