WebService 接口方法里,不能有两个以上的 const 的 Vairant 参数。

3 views
Skip to first unread message

电脑玩家

unread,
Sep 16, 2009, 11:15:02 AM9/16/09
to 挨踢技术
在 Delphi 7 的 WebService 接口里,同时提交 2 个 ClientData.Delta,比如接口函数写成:
SaveMyData(const ADelta, BDelta: Variant);stdcall; 则客户端在调用这个接口方法,输入两个
Delta 的时候,会出现 【Invalid variant type】异常错误。这时候,在服务器端设置断点,发现根本还没有调用到服务器端。甚
至在服务器端的这个接口方法的实现部分一行代码不写,也出同样错误。结论:在D7的WebService里,客户端通过接口函数里传递
Vairant 的参数给服务器端,如果接口函数里只有一个 Variant 类型的参数,是没问题的;如果有两个,则会出现上述异常。解决办法:把两
个 Delta 组合为一个Variant数组,可以采用: CDelta := VarArrayOf([ADelta, BDelta]); 的方
法得到组合后的 CDelta,测试通过;服务器端通过 CDelta[0], CDelta[1] 的方式取得两个表各自的 Delta.

如果主表的主键是是从表的外键,而主从两个表的 Delta 同时提交,并包在一个事务里,则因为事务没提交时,主表的数据还没真正写入数据库,导致从
表 ApplyUpdates 的时候,出现外键错误的异常,导致提交失败。只好把外键关系取消。

嵌套表构成的主从表,从表对应主表主键的字段名,即从表的 MasterField 的名字,必须和主表的主键的名字相同,D7 是依靠名字相同来控制
的,而不是依靠 MasterField 字段设置来控制的。如果名字不同,则行为很奇怪。

Reply all
Reply to author
Forward
0 new messages