当前位置 : 主页 > 编程语言 > java >

Soap/Web Service执行效率的思考

来源:互联网 收集:自由互联 发布时间:2022-10-26
以下内容都是针对李维老师的《Delphi 6/Kylix2--soap/Web Service程序设计篇》一书中的实例的,我的程序框架和他做的基本一致,只是我没有进行压缩,功能上已经全部实现。遇到的问题如下:
以下内容都是针对李维老师的《Delphi 6/Kylix2--soap/Web Service程序设计篇》一书中的实例的,我的程序框架和他做的基本一致,只是我没有进行压缩,功能上已经全部实现。遇到的问题如下:
1.李维老师在书中<>在数据库部分在更新时服务端用到了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;

解决这一问题的方法就是更新时只传递已更改的数据内容,
如客户机这样处理,增加一个TempClientDataSet临时变量,利用TClientDataSet本身的功能把外部的Delta转变成XMLData格式:
TempClientDataSet.Data:=DZSBFileClientDataSet.Delta ;
IQueryDataFind.UpdateData(XTToCompressSoapPacket1(TempClientDataSet.xmldata), lErrorCount);
DataUpDatelbl.Caption := '更新状态:' + Inttostr(LerrorCount);
TempClientDataSet.Data:=Null;
服务端用dsp直接修改,其实不用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;
网友评论