Delphi 客户端调用WebService(天气预报)
来源:互联网 发布:2016淘宝双十一地区 编辑:程序博客网 时间:2024/05/16 05:11
第一步:新建一个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;
- Delphi 客户端调用WebService(天气预报)
- Delphi 编写调用WebService接口的小程序(天气预报)
- Android调用WebService(天气预报)
- 用C# 调用webservice(天气预报)
- Android调用WebService(ksoap2 天气预报)
- java调用webservice 天气预报
- 调用天气预报WebService
- CXF 调用天气预报webservice
- WebService 之调用天气预报
- java调用webservice 天气预报
- js 调用天气预报webservice
- java调用天气预报webservice
- MFC客户端WebService(gSOAP)天气预报
- Flex调用Webservice实现天气预报
- vc调用webservice获取天气预报
- Flex调用Webservice实现天气预报
- C#调用WebService实现天气预报
- C#调用WebService实现天气预报
- L2数据链路层的数据包处理详细流程
- Seasar的Employee例子学习
- 判断一个数是2的N次方
- hdu 4738 Caocao's Bridges
- 生产消费者模式
- Delphi 客户端调用WebService(天气预报)
- Oracle 批量提交代码
- windows mysql 自动备份的几种方法
- hibernate 对 sql server 2005 分页改进
- 第1次会议纪要
- 详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
- js正则表达式语法 .
- 国庆
- LAMP 架构的编译安装及错误完全分析