一个有关webservice的问题 |
答題得分者是:Mickey
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
请问一个关于webservice的问题,服务端只有一个接口IFistWS:
type IFirstWS=interface(IInvokable) ['{4D72FE8F-6543-4DC0-91ED-796746BF4E13}'] function GetWSMsg:WideString;stdcall; end; implementation uses InvokeRegistry; initialization InvRegistry.RegisterInterface(TypeInfo(IFirstWS)); =====TFirstWS实现上面的接口: type TFistWS=class(TInterfacedObject,IFirstWS) public function GetWSMsg : widestring; stdcall; end; implementation { TFistWS } function TFistWS.GetWSMsg: widestring; begin Result:='Test Good'; end; procedure FirstWSFactory(out obj:TObject); begin obj:=TFistWS.Create; end; initialization InvRegistry.RegisterInvokableClass(TFistWS,FirstWSFactory); end. /////////////////////////////////// 客户端的HTTPRIO1的WSDLLOCATION我设置为: http://localhost:8081/FirstWEBService.WSDemo1/wsdl/IFirstWS 我在web app debugger中看到的地址是这个。 PORT:IFirstWSPort和Serice:IFirstWSservice 都是从下拉框中的选中的。 我在button1中的代码为: implementation {$R *.dfm} uses FirstWSIntf; procedure TForm1.BitBtn1Click(Sender: TObject); var IFWebClient:IFirstWS; begin IFWebClient:=HTTPRIO1 as IFirstWS; try Edit1.Text:=IFWebClient.GetWSMsg; finally IFWebclient:=nil; end; end; //执行到Edit1.Text:=IFWebClient.GetWSMsg;这一句时报错,提示如下: Project clientapp.exe raised exception class ERemotableExcpetion with message 'Invalid pointer operation',Process stopped.Use Step or Run to continue. 这个错误是怎么造成的?还请各位大大们帮忙指点,谢谢! 我调试服务端时,发现是在_FreeMem(self)这一步报的错。 (附件中有这整个过程) |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
Mickey大大,十分感谢您的回贴!
我是最近看李维老师一书上的例子时遇到的问题,这个例子D6下面的,我在D7中测试,但是在点击客户端按钮时,出现这个错误提示, 后来,我就调试服务端,发现GetWSMsg这个方法已执行了,并且出错地方是在对像被释放时,也就是_FreeMem(self)这条语句出错, 于是感觉是对象释放时出了问题,想到李维老师另一书inside vcl中的接口一章的实现接口对象释放时,会出现接口引用计数为0时,会自动 将对象也释放,但如果还调用feeandnil或对象.free时就会出现错误。 在这个例子中_FreeMem(self)这条语句报错是'Invalid pointer operation',猜想是不是self已经被释放了,于是我在FirstWSFactory方法中 增加了接口引用计数: procedure FirstWSFactory(out obj:TObject); begin obj:=TFirstWS.create; (TFirstWS(obj) as IFistWS)._AddRef; end; 这样修改后,程序运行正常了! 至于我这样理解是否正确,还请指点,谢谢! ===================引 用 文 章=================== 您好: 您 Invoke RIO 的方法不對... 最好透過 Delphi IDE...WSDL Importer... 產生的 Unit 中...會有叫做 GetIFirstWS 的 Function. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |