Delphi 客户端调用WebService(天气预报)
2013-09-30 14:02
295 查看
客户程序:
第一步:新建一个Application。
第二步:File----->New----->Other------>WebServices----->Soap Services Importer
然后在Wsdl or Xml Schema Location中填入:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,然后确定即生成了一个新的接口定义单元。
第二步:在主form上放上一个按钮和一个Httprio组件(在WebServices页上),并引用第二个单元(即通过Soap Services Importer自动生成的单元)
在Httprio的属性页上的WsdlLocation里面填上http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl;然后在Httprio属性页上的Port和Service上选择上相应的数据即可。
第三步:书写客户调用程序,原代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
TMP_Weather: ArrayOfString;
begin
//http://developer.51cto.com/art/200908/147125.htm
//http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
TMP_Weather := (HTTPRIO1 as WeatherWebServiceSoap).getWeatherbyCityName('53698'); //石家庄
Memo1.Lines.Clear;
for i := 0 to 22 do
begin
Memo1.Lines.Add(TMP_Weather[i]);
end;
end;
---- 错误信息为:
Project Project1.exe raised exception class ERemotableException with message '服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'. Process stopped. Use Step or Run to continue.
------解决方案--------------------------------------------------------
修改一下WeatherWebService.pas这个单元,如下所示,一切就OK啦。
Delphi(Pascal) code
第一步:新建一个Application。
第二步:File----->New----->Other------>WebServices----->Soap Services Importer
然后在Wsdl or Xml Schema Location中填入:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,然后确定即生成了一个新的接口定义单元。
第二步:在主form上放上一个按钮和一个Httprio组件(在WebServices页上),并引用第二个单元(即通过Soap Services Importer自动生成的单元)
在Httprio的属性页上的WsdlLocation里面填上http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl;然后在Httprio属性页上的Port和Service上选择上相应的数据即可。
第三步:书写客户调用程序,原代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
TMP_Weather: ArrayOfString;
begin
//http://developer.51cto.com/art/200908/147125.htm
//http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
TMP_Weather := (HTTPRIO1 as WeatherWebServiceSoap).getWeatherbyCityName('53698'); //石家庄
Memo1.Lines.Clear;
for i := 0 to 22 do
begin
Memo1.Lines.Add(TMP_Weather[i]);
end;
end;
---- 错误信息为:
Project Project1.exe raised exception class ERemotableException with message '服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'. Process stopped. Use Step or Run to continue.
------解决方案--------------------------------------------------------
修改一下WeatherWebService.pas这个单元,如下所示,一切就OK啦。
Delphi(Pascal) code
if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; RIO.HTTPWebNode.UseUTF8InHeader:= True; //这里加上这一句 try Result := (RIO as TestStationSoap); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; InvRegistry.RegisterInterface(TypeInfo(WeatherWebServiceSoap), 'http://WebXml.com.cn/', 'utf-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(WeatherWebServiceSoap), 'http://WebXml.com.cn/%operationName%'); RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfString), 'http://WebXml.com.cn/', 'ArrayOfString'); RemClassRegistry.RegisterXSClass(getSupportDataSetResult, 'http://WebXml.com.cn/', 'getSupportDataSetResult'); InvRegistry.RegisterInvokeOptions(TypeInfo(WeatherWebServiceSoap), ioDocument);//这里加上这一句 ------解决方案-------------------------------------------------------- 补充一下,如果你用到HTTPRIO1去调webservice接口 那就记得在前面加上这句 HTTPRIO1.HTTPWebNode.UseUTF8InHeader:= True;
相关文章推荐
- Delphi7 客户端调用WebService(天气预报)
- Delphi 客户端调用Webservice 的TClientdataset 报出“http://www.borland.com/namespaces/Types-IAppServerSOAP”
- Delphi 编写调用WebService接口的小程序(天气预报)
- axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务
- windows 2003 Server平台Delphi程序不支持直接调用webservice
- 用JAVA做一个天气预报webservice的客户端
- Delphi动态调用Java的WebService —— 基于“Axis2发布WebService例子(HelloWorld)”
- WebService系列博客{三}[通过本地Wsdl文件生成客户端调用代码、MyEclipse视图调用webservice]
- Delphi调用webservice总结
- java客户端调用c#的webservice服务
- 根据wsdl的url,使用axis1.4生成客户端,并且对webservice进行调用(转)
- Delphi 调用webservice接口的三类方法
- Delphi调用java开发的WebService,传入参数出错
- CXF客户端调用webservice接口报错
- WebService的四种客户端调用方式(基本)
- WinForm客户端调用 WebService时 如何启用Session
- CXF动态客户端调用webservice实例
- Android调用天气预报的WebService简单例子
- 联通项目随笔5---mave项目实现WebService项目的发布在Jboss上,然后用servlet实现客户端调用
- CXF动态客户端调用JDK自带Webservice安全校验