首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

调用WEBService 出错,该如何处理

2012-03-09 
调用WEBService 出错1.新建一个App, 放上一个button, listbox, HTTPRIO2.新建webservices - wsdlInmporte

调用WEBService 出错
1.新建一个App, 放上一个button, listbox, HTTPRIO
2.新建webservices -> wsdlInmporter 导入你这个网站的Wsdl 让程序知道调用规则
  不出意外会生成个WeatherWebService.pas ,主窗体引用它
  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

3.设置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.


[解决办法]
你确认服务器连接正常吗
[解决办法]
这个错误好像是没实例化。
[解决办法]
http://blog.csdn.net/masterjames/article/details/3946179
[解决办法]
up一下。。。。。
[解决办法]
HTTPRIO1 没有创建就是用了吧
[解决办法]
修改一下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;

热点排行