delphi调用webservice

本文详细介绍如何在Delphi环境中引入并使用WebService,包括配置UTF-8编码、修改自动生成的文件及调用WebService的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在delphi工程中增加一个webService引用;
(1)执行主菜单File->new->other...,选择webService页,选择WSDLImporter,OK;
(2)输入要引用的webService地址,如:http://unimap2003/regiplan_forAGS/SIPPlanApproval2009WebService_forAGS.asmx,注意:仅仅输入这个地址是不行的,会报错,需要

在地址后面加上5个字符“?wsdl”;
(3)然后next,然后Finish,就会产生一个文件,我们的例子中会产生SIPPlanApproval2009WebService_forAGS.pas文件;

 

2.这样的文件是不能直接使用的,需要做以下修改:

(1)在uses中增加OPConvert引用;

(2)在主函数中加入以下内容:

  //add-------to support UTF-8
    RIO.HTTPWebNode.UseUTF8InHeader := true;  //添加该行,指定采用UTF-8代码传输
    RIO.Converter.Encoding:='UTF-8';
    RIO.Converter.Options:=RIO.Converter.Options + [soUTF8InHeader,soUTF8EncodeXML];
  //add-------END

添加的位置是以下代码的下面:
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;


(3)在文件的末尾,也就是 initialization 的最后加入以下语句:

InvRegistry.RegisterInvokeOptions(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap),ioDocument);
这样,完整的initialization 就变成

initialization
  InvRegistry.RegisterInterface(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap), 'http://unimap.com/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap), 'http://unimap.com/%operationName%');

  InvRegistry.RegisterInvokeOptions(TypeInfo(SIPPlanApproval2009WebService_forAGSSoap),ioDocument);

其中SIPPlanApproval2009WebService_forAGSSoap是服务名;根据你调用的webService不同而不同;

这样自动产生的文件就修改完成了;

3.调用webService,我们以在界面上的button1的点击事件中调用webService为例
(1)在界面对应的pas文件中添加引用,就是在uses中增加SOAPHTTPClient、OPConvert和SIPPlanApproval2009WebService_forAGS,SIPPlanApproval2009WebService_forAGS就是之前自动产生

的文件;

(2)button1的click事件如是写
procedure TForm1.Button1Click(Sender: TObject);
var
  mHttpRIO: THTTPRIO;
  mServiceSoap: SIPPlanApproval2009WebService_forAGSSoap;
begin
  mHttpRIO := THTTPRIO.Create(nil);
  try
    //将URL改为webService真正的地址 ,且设置Encoding、Options,否则也会乱码

    mHttpRIO.URL := 'http://unimap2003/regiplan_forAGS/SIPPlanApproval2009WebService_forAGS.asmx';
    mHttpRIO.HTTPWebNode.UseUTF8InHeader := true;  //添加该行,指定采用UTF-8代码传输
    mHttpRIO.Converter.Encoding:='UTF-8';
    mHttpRIO.Converter.Options:=mHttpRIO.Converter.Options + [soUTF8InHeader,soUTF8EncodeXML];

    mServiceSoap := mHttpRIO as SIPPlanApproval2009WebService_forAGSSoap;

    showmessage(mServiceSoap.HollowWord) ;//调用webService中方法

  except
  end;
end;

4.编译,运行,成功!

Delphi是一种编程语言,可以用来开发各种类型的应用程序,包括调用Web服务。在Delphi调用Web服务,可以使用Delphi内置的SOAP组件来实现。 首先,需要在Delphi中创建一个新的SOAP客户端。打开Delphi开发环境,选择"文件" -> "新建" -> "其他" -> "SOAP客户端应用程序"来创建一个新的SOAP客户端项目。 在新建的SOAP客户端项目中,可以在"工具"菜单下找到"导入WSDL..."选项。通过选择该选项并选择要调用的Web服务的WSDL文件,可以自动生成相应的接口和实现代码。 在生成的代码中,可以看到WebService组件的初始化代码、接口定义和具体的方法实现。根据WebService的要求,可以在接口定义中添加需要的输入参数和返回值,并在方法实现中编写相应的业务逻辑。可以调用WebService的方法来实现与Web服务的交互。 接下来,可以根据自己的需求调用WebService的方法。可以在程序的适当位置,通过创建WebService组件对象并调用相应的方法来实现对Web服务的调用。可以传递参数给Web服务,并获取返回的结果。 在调用WebService的方法之前,需要确保已经建立了与Web服务的连接。可以调用WebService组件的Connect方法来建立连接,调用Disconnect方法来断开连接。 在调用WebService的过程中,还可以处理异常,以确保程序在发生错误时能够正常处理。可以使用try...except块来捕获并处理异常,通过处理异常可以提示用户发生了什么错误,并采取相应的措施。 总结而言,通过使用Delphi的SOAP组件,可以方便地实现对Web服务的调用。在创建SOAP客户端项目、生成接口和方法实现代码后,可以根据需要调用WebService的方法,传递参数并获取返回值。同时,还需要处理异常,以确保程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值