WebService中按引用传递参数

equn93 2010-03-11 09:11:15
不知WebService中是否可以按引用传递参数,按理来说应该是不可以的,把一个引用传递到远程客户端能读出实际的值吗?不过我做了个小例子却是可以的,比如:
WebService 中:
function GetMsg(var msg: string): string;
begin
msg:= 'You enter is ' + msg;
Result:= msg;
end;

客户端调用:
var
Intf: Iaa; //WebService 中的接口
msg: string;
begin
HTTPRIO1.URL:= 'http://192.168.3.185:1240/soap/Iaa';WebService 地址
Intf:= HTTPRIO1 as Iaa;
msg:= 'msg aa';
ShowMessage(Intf.GetStr(msg)); //显示为 You enter is msg aa
ShowMessage(msg); //显示为 You enter is msg aa
end;

这样看的话还是能够按引用传递参数的,只是我不明白其中的原理,期待高手指点一下。
...全文
249 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd_zhouqian 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liangpei2008 的回复:]

1.
传递的是内容,而不是地址!
做为远程调用,二个进程的内存空间都不在一起,不可能用指针来实现的引用传递的。

[/Quote]

up
liangpei2008 2010-03-12
  • 打赏
  • 举报
回复
1.
传递的是内容,而不是地址!
做为远程调用,二个进程的内存空间都不在一起,不可能用指针来实现的引用传递的。
2.


procedure TForm1.htpr1AfterExecute(const MethodName: String;
SOAPResponse: TStream);
begin
(SOAPResponse as TMemoryStream).SavetoFile();
//或者用HttpWatch来监测
end;
equn93 2010-03-12
  • 打赏
  • 举报
回复
谢谢。。。
结帖!!
顶着有份
equn93 2010-03-11
  • 打赏
  • 举报
回复
原来是这样啊。。。
感谢liangpei2008,不过还有点小疑问,通常说按引用传递传的是指针(指向该变量的一个内存地址),这样说的话,把一个指针传递给远程的客户端或服务端,那接收方如何知道这个地址指向的变量的实际值呢。还是说其实传递的不是地址,而是把所有内容都传递过去?
另如何截取WS的包?望liangpei2008指点一二,谢谢!
liangpei2008 2010-03-11
  • 打赏
  • 举报
回复
这种问题如果自己做一下截包试验的话,一切都很好解释。
WS是基于HTTP协议的,在传参时会把对象或数据转成XML而后传递。在WS使用普通参数与变参传递的根本区别是在服务器响应事件后,会多发一条信息来更新本地的变参变量。
如:
函数中有变参,服务器response后的stream应该是这样

<return xsi:type="xsd:string">You enter is msg aa</return>
<msg xsi:type="xsd:string">You enter is msg aa</msg>

函数中无变参时,是这样

<return xsi:type="xsd:string">You enter is msg aa</return>

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧