1.新建一个App, 放上一个button, listbox, HTTPRIO
2.新建webservices -> wsdlInmporter 导入你这个网站的Wsdl 让程序知道调用规则
不出意外会生成个WeatherWebService.pas ,主窗体引用它
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl3.设置HTTPRIO的 port, service, wsdlLocation 会下拉出来
4.写点代码吧
//得到支持的地区
procedure TForm1.Button1Click(Sender: TObject);
var
AOS,ss: ArrayOfString;
I: Integer;
begin
AOS := (HTTPRIO1 as WeatherWebServiceSoap).getSupportProvince;
for I := Low(AOS) to High(AOS) do
Listbox1.Items.Add(AOS[I]); -- 可以把所有省份列出来但是使用下面代码,出现错误:
-- 取省份下的城市
ss := (HTTPRIO1 as WeatherWebServiceSoap).getSupportCity('广西')
-- 取城市的天气
ss := (HTTPRIO1 as WeatherWebServiceSoap).getWeatherbyCityName('深圳');---- 错误信息为:
Project Project1.exe raised exception class ERemotableException with message '服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'. Process stopped. Use Step or Run to continue.
2.新建webservices -> wsdlInmporter 导入你这个网站的Wsdl 让程序知道调用规则
不出意外会生成个WeatherWebService.pas ,主窗体引用它
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl3.设置HTTPRIO的 port, service, wsdlLocation 会下拉出来
4.写点代码吧
//得到支持的地区
procedure TForm1.Button1Click(Sender: TObject);
var
AOS,ss: ArrayOfString;
I: Integer;
begin
AOS := (HTTPRIO1 as WeatherWebServiceSoap).getSupportProvince;
for I := Low(AOS) to High(AOS) do
Listbox1.Items.Add(AOS[I]); -- 可以把所有省份列出来但是使用下面代码,出现错误:
-- 取省份下的城市
ss := (HTTPRIO1 as WeatherWebServiceSoap).getSupportCity('广西')
-- 取城市的天气
ss := (HTTPRIO1 as WeatherWebServiceSoap).getWeatherbyCityName('深圳');---- 错误信息为:
Project Project1.exe raised exception class ERemotableException with message '服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'. Process stopped. Use Step or Run to continue.
解决方案 »
- Delphi语句有问题,请赐教
- 请问如何让ListView中被选中的纪录以突出的颜色显示?
- 100分!怎样使StringGrid1不同网格线的Width和Color不同?
- 谁能帮我解决一个问题啊??
- 急~~~~~请问如何判断TMemo控件中当前光标在多少行?在线等
- 关于打印特殊字符的问题(请帮忙啊)
- 在Install Shield中加IE的快捷方式
- 初学者请求帮忙!!!!
- 在InterBase中如何支持Create,Drop命令?(我只有7分了真可怜!~~)
- 如何控制edit中只输入数字类型(keypress,keydown)需要例子
- Delphi中的10进制转到2进制
- 如何将一串字符串转成BCD码
for I := Low(AOS) to High(AOS) do
Listbox1.Items.Add(AOS[I]); -- 可以把所有省份列出来
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.HTTPWebNode.UseUTF8InHeader:= True;