如何提升SoapWeb Service的执行效率?

2026-05-27 21:281阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计503个文字,预计阅读时间需要3分钟。

如何提升Soap/Web Service的执行效率?

以下是对原文的简化

如何提升Soap/Web Service的执行效率?

原文:以下内容都是针对李维老教师的《Delphi 6/Kylix 2--SOAP/Web Service程序设计篇》一书中实例的,我的程序框架和它做的基本一致,只是我没有进行压缩,功能上已经全部实现。遇到的问题如下:

简化版:以下内容基于李维老师的《Delphi 6/Kylix 2--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;
标签:思考以下

本文共计503个文字,预计阅读时间需要3分钟。

如何提升Soap/Web Service的执行效率?

以下是对原文的简化

如何提升Soap/Web Service的执行效率?

原文:以下内容都是针对李维老教师的《Delphi 6/Kylix 2--SOAP/Web Service程序设计篇》一书中实例的,我的程序框架和它做的基本一致,只是我没有进行压缩,功能上已经全部实现。遇到的问题如下:

简化版:以下内容基于李维老师的《Delphi 6/Kylix 2--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;
标签:思考以下