请教跨语言WebService的DB App中,Delphi在客户端的解决方案(200分)

  • 主题发起人 主题发起人 yap
  • 开始时间 开始时间
Y

yap

Unregistered / Unconfirmed
GUEST, unregistred user!
关注WebService已经有段日子了,总想让它在实际项目中应用。
在网上查找了很多的资料,却发现深入讲解应用的并不多见。
前些日子,有心做个DB App的Demo,却遇到这样一些尴尬的问题。
如果从前到后全使用Delphi开发,那是没问题,都比较方便,
可我在服务器端采用Java, 客户端采用Delphi(实现的方式主要参照
Delphi自带的例子IssuesSample),将客户端修改和更新的数据转换成
数组对象,通过SOAP传输到服务器端,再由服务器端程序根据每条记录
的更新标记(自定义的)实现数据的更新。以下罗列所遇到的问题:
1. DataSet Records <=> Array of Object 没有方便自动的机制
这或许应该是我们自己来做的事情,可我发现SOAP似乎不支持
多态(当然也可能是我不知道实现的方法),导致无法编写一个
有效的框架,自动完成类似的任务。结果是每个这样的转换
都必须至少写两个相互转换值的函数,工作量大而又无意义。
其实,在.Net中DataSet是可以绑定数组、集合等的自定义
DataSource,不知道在Delphi中如何实现。请大家给点意见。我
觉的这个机制很重要,极大的简化开发工作。
2. 在ClientDataSet中似乎不能很好的跟踪数据的更新状态。
cdsDelta.data:=cdsOrders.Delta;
cdsDalta.First;
while not cdsDelta.Eofdo
begin
if cdsDelta.UpdataStatus = usDelete then
begin
... //do something here
//实际执行中发现这段代码执行不到,搞不懂
end;

... //判断其他更新状态
cdsDelta.Next;
end;
而且,我发现由于ClientDataSet保留一次ApplyUpdates前的所有
操作历史记录,会导致最终转换出来的更新数组比实际需要
的大,增加网络传输负担。
3. 我想请教一下批提交时的错误处理方式,由于在这样的环境下,
已经没办法很好的利用Delphi自身批提交的错误处理机制,当然
我可以保证把出错的纪录数组回传到客户端。我想听听大家的意见

我的主要想法是能够让客户端的开发和以前用Delphi的方式基本上没有
太大的改变。各位只要是有过跨语言WebService开发经验的,至少第一
和三的问题应该遇到过。所以想请教一下各位的解决方案。非常感谢!
最后我想说说自己的想法,我觉得大多数时候对WebService的讨论似乎都停留在表面
不知大家为什么不愿更深入的讨论实际开发中需要解决的问题。新技术再好,不能
有效的运用到实际开发中,对自己的技术提高又有什么好处?还是各位专家们有意保留?
(以上的话不针对任何人,请勿对号入座)
 
第二条问题我已经全部搞清除了,使我自己搞错了。
如果没提交前删除新增的记录,确实用不着把这条记录标注为已删除
这一点ClientDataSet做得很聪明
至于修改的纪录,ClientDataSet.Delta中会保留最后一次修改的纪录
 
你解决问题太慢了,一年以前我都搞定了,而且不用封装到数组,因为ClientDataset 内的XML格式是可以研究出来的,当然,中国Borland也不知道 :D
 
后退
顶部