我使用 WebService 控件包中的控件 HTTPRIO 来实现与 WebService 服务器连接。  Delphi6-->File-->New-->Other...-->WebService-->WSDL Importer-->Keyin IP Address-->Next-->Finish.
会发现,wsdl会生成一个*.pas文件,  
WebService IP Address 这部分是写死在 *.pas 文件中的。如下:defWSDL = 'http://111.111.111.111/cug/webservice/webservice_out.wsdl';
defURL  = 'http://111.111.111.111/cug/webservice/webserviceserver.php';
defSvc  = 'webserviceService';
defPrt  = 'webserviceclassPort';
这样的话,当 WebService IP Address 变更或者文件夹重新命名的话,就要修改程式中的这段代码,程式就要重新编译。
目前需要做的,就是动态更新 WebService IP Address,而不是现在这样写死。如果采用配置文件的话,那么是只用变更上面四个参数么?能不能由配置文件导入WSDL的地址,动态生成的方法?在此请教各位高手该怎么修改!谢谢!

解决方案 »

  1.   

    wsdl会生成一个*.pas文件里有
    function GetService1Soap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): Service1Soap;
    const
      defWSDL = 'http://111.111.111.111/cug/webservice/webservice_out.wsdl';
      defURL  = 'http://111.111.111.111/cug/webservice/webserviceserver.php';
      defSvc  = 'webserviceService';
      defPrt  = 'webserviceclassPort'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;
      try
        Result := (RIO as Service1Soap);
        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;
    end;
    在调用这个函数的时候,你只要传参数进去就可以了