SOAP WebService 问题收集论坛 (1分)

  • 主题发起人 主题发起人 jettop
  • 开始时间 开始时间
J

jettop

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家有关SOAP WebService的问题都收集到这里,方便查找。因为好象涉及到此类问题的人都无法在DFW里快速找到答案。我本人也有很多问题,但是在DFW里没人回答。
所以希望有相关经验的高手们能到此解答一些大家急于解决的问题。
 
我用D7的web service 向导创建一个工程,并定义了接口。
在客户端我用SoapConnection组件与它连接,并用ClientDataSet实现与服务器的DataSetProvider联接,
所有数据的读及写(用ClientDatSet.ApplyUpdates方法)是没有问题的。
同时在客户端用HTTPRIO组件实现调用服务器的接口方法,也是没有问题的。
我想不用ClientDatSet.ApplyUpdates方法保存数据,而通过HTTPRIO组件调用服务器的方法来保存数据,将ClientdataSet.Delta传到服务器,在服务器中实现ApplyUpdate。
这种机制是否有问题?我不太清楚,在COM+中我是这样实现的。之所以要这样做是因为我想自己控制它的SQL语句来提交数据,因为我有其它业务逻辑要加上去,并非只保存单一个表哪么简单,所以不能用ClientDataSet.ApplyUpdates方法。这是必须这样做的。
在SOAP中我没有实现,不知是方法错了,还是机制不对。
服务器端的接口方法:
procedure Tff.UpdateData(const v_Delta1,v_UpdateTable1:OleVariant;
iMaxError: Integer;
out iErrorCount: Integer;v_UpdateOtherTabSqlTxt:string='');stdcall;
var i,j:Integer;
begin
try
WebDm.Adoquery1.close;
WebDm.ADOQuery1.SQL.Clear;
WebDM.adoquery1.SQl.text := 'SELECT * FROM '+ v_UpdateTable1 ;
WebDM.DataSetProvider1.UpdateMode := upWhereChanged;
WebDM.DataSetProvider1.ApplyUpdates(v_Delta1, i, j);
except
end;
end;
客户端:
procedure TForm3.Button3Click(Sender: TObject);
var i,j :Integer;
begin
if (ClientDataset1.State = dsEdit) or (ClientDataSet1.State = dsInsert) then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount > 0 then
(HTTPRIO1 as Iff).UpdateData(ClientDataSet1.Delta,'table1',i,j);//调用服务器接口方法企图实现保存动作
end;

以上方法肯定有问题,我想ClientDataSet是通过SoapConnection组件的DataSetProvider取数据,而提交时又用HTTPRIO组件的接口方法提交Delta,这应该是错误的思路,但我不知如何解决它!
请高手略点一二。
 
你的思路没有错
用什么方式取数据和你用什么方式提交数据没有关系的
问题出在webservices soap 上的接口方法是不支持OleVariant数据类型的,你必须把OleVariant类型的数据编码成base64然后按widestring类型传递,在服务端解码成OleVariant类型。
 
后退
顶部