soap/web server的思考 |
|
wujun0901
一般會員 發表:8 回覆:7 積分:3 註冊:2007-02-10 發送簡訊給我 |
以下内容都是针对李老师的soap/web server数据库开发的,我的程序框架和它的做的一样,功能上已经全部实现.遇到的问题如下
1.李老师在书中<<soap/web server>>在数据库部分在更新时服务端用到了clientdataset.XMLData,客户机在发送时也是 clientdataset.XMLData,这样的话在数据量大的时候特别是有blob字段的时候,数据会很慢.因为client部分其实只要发送clientdataset.delta值进行xml封装就行了. 我不会,请高手指教 client更新原始代码如下: IQueryDataFind.UpdateData(XTToCompressSoapPacket1(DZSBFileClientDataSet.xmldata), lErrorCount); DataUpDatelbl.Caption := '更新状态:' Inttostr(LerrorCount); XTToCompressSoapPacket1//是先进行压缩处理 服务端更新代码如下: try Self.DZSBFileClientDataSet.Active := False; Self.DZSBFileClientDataSet.XMLData := XTToUnCompressSoapPacket1(sData); IErrorCount := Self.DZSBFileClientDataSet.ApplyUpdates(0); SetComplete; except on Exception do SetAbort; end; 2.目前我的程序是delphi7做的,在用delphi2006编译后,程序能用,查询数据速度快了很多.看来borland delphi2006对soap/web server优化了许多. 但有两个问题 2.1服务端做的com ,delphi 7中在菜单run->install com ,delphi2006没有了,要在delphi2006找到类似的功能,怎么办? 2.2delhpi2006对简体中文查询有问题.就像clientdataset不能过滤"水"一样. 客户机代码 IQueryDataFind.QueryChangBillData('Select top ' RecordCountEdt.text ' * from 更改申请单 ', vData);就是不能执行,代码一定一定是对的,我查了很多边,开始我也以为是自己的代码写错了.别的中文表都可以的,搞了我半天,后来不得不把这张表的名称改了才可以. 2.3在delphi7中 IQueryDataFind.QueryChangBillData('Select top ' RecordCountEdt.text ' * from 中文表 order by 序号 ', vData);可以执行 在delhpi2006有 'order by '就是不能执行.可能也要英文字段才可以.晕 3.在客户机部分 3.1 如果HTTPRIO单元出错过一次,比如服务机有多个,第一个服务器试验时是故意失败的.一连客户机出错后,连其它好的服务器,连接是正常的.但clientdataset就是没有出不来数据用.datasource故意先断开clientdataset,再取得数据后,在datasource设置dataset也没用.不知你们有没有遇到过 3.2 在这样的web /soap环境中,我不知道客户机怎么才能取得服务端的出错信息.在三层中我知道用客户机的clientdata的reconcileerror事件是可以回取值的. 3.3在服务端如果DataSetProvider设为false,updatemode我设了upWhereKeyOnly,这样都已经可以了.有一个问题.客户机在新增记录后 保存成功,但客户机的主键还没refresh的情况下,如果更新其它字段一定会失败,因为在服务端key一定找不到了,我在想是不是客户机在新增记录保存后,一定要重新查询一下,大家对这样的问题是怎么处理的 |
wujun0901
一般會員 發表:8 回覆:7 積分:3 註冊:2007-02-10 發送簡訊給我 |
|
wujun0901
一般會員 發表:8 回覆:7 積分:3 註冊:2007-02-10 發送簡訊給我 |
第一个问题我已经解决
方法如下客户机 TempClientDataSet.Data:=DZSBFileClientDataSet.Delta ; IQueryDataFind.UpdateData(XTToCompressSoapPacket1(TempClientDataSet.xmldata), lErrorCount); DataUpDatelbl.Caption := '更新状态:' Inttostr(LerrorCount); TempClientDataSet.Data:=Null; 服务端用dsp直接修改 try Self.DZSBFileClientDataSet.Active := False; Self.DZSBFileClientDataSet.XMLData := XTToUnCompressSoapPacket1(sData); // IErrorCount := Self.DZSBFileClientDataSet.ApplyUpdates(0); Self.DZSBFileDataSetProvider.ApplyUpdates(DZSBFileClientDataSet.data,0,IErrorCount); SetComplete; except on Exception do SetAbort; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |