unit ALEService;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;typeEmptyParms           = class;                 { "urn:epcglobal:ale:wsdl:1" }EmptyParms = class(TRemotable)
  private
  public
    constructor Create; override;
  published
  end;GetALEID        = EmptyParms;      { "urn:ale.logicalloy.com"[L] }
GetALEIDResult  =  type WideString;      { "urn:ale.logicalloy.com"[L] }function  getALEID(const parms: GetALEID): GetALEIDResult; stdcall;implementationconstructor EmptyParms.Create;
begin
  inherited Create;
  FSerializationOptions := [xoLiteralParam];
end;initialization
RemClassRegistry.RegisterXSInfo(TypeInfo(GetALEID), 'urn:ale.logicalloy.com', 'GetALEID');
RemClassRegistry.RegisterXSInfo(TypeInfo(GetALEIDResult), 'urn:ale.logicalloy.com', 'GetALEIDResult');

解决方案 »

  1.   

    我先说明一下,这是一个从WSDL转换来的web service接口单元,我现在想调用接口中的函数,比如说
    function  login(const parms: Login): LoginResult; stdcall;
    它的参数login应该怎么声明,然后要根据参数也就是login来判断loginresult的sucess是否通过验证
    unit   ALEService; interface uses   InvokeRegistry,   SOAPHTTPClient,   Types,   XSBuiltIns; type EmptyParms           = class;                 {   "urn:epcglobal:ale:wsdl:1"   } 
    Login                = class;                 { "urn:ale.logicalloy.com" }
    LoginResult          = class;                 { "urn:ale.logicalloy.com" }EmptyParms   =   class(TRemotable) 
        private 
        public 
            constructor   Create;   override; 
        published 
        end; GetALEID           =   EmptyParms;             {   "urn:ale.logicalloy.com"[L]   } 
    GetALEIDResult     =   type   WideString;             {   "urn:ale.logicalloy.com"[L]   } Login = class(TRemotable)
      private
        Fusername: WideString;
        Fpassword: WideString;
      public
        constructor Create; override;
      published
        property username: WideString read Fusername write Fusername;
        property password: WideString read Fpassword write Fpassword;
      end;LoginResult = class(TRemotable)
      private
        FloginTime: TXSDateTime;
        FsessionId: WideString;
        Fsuccess: Boolean;
        Fusername: WideString;
      public
        constructor Create; override;
        destructor Destroy; override;
      published
        property loginTime: TXSDateTime read FloginTime write FloginTime;
        property sessionId: WideString read FsessionId write FsessionId;
        property success: Boolean read Fsuccess write Fsuccess;
        property username: WideString read Fusername write Fusername;
      end;ALEServicePortType = interface(IInvokable)
      ['{89261E5F-CB3D-B520-AB70-8D333AB656C3}']
      function     getALEID(const   parms:   GetALEID):   GetALEIDResult;   stdcall; 
      function  login(const parms: Login): LoginResult; stdcall;
    end;function GetALEServicePortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ALEServicePortType;implementation function GetALEServicePortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ALEServicePortType;
    const
      defWSDL = 'E:\Study\ALE Server\ALE Server\API\src\ALEService.wsdl';
      defURL  = 'http://localhost:8080/api/services/ALEService';
      defSvc  = 'ALEService';
      defPrt  = 'ALEServicePort';
    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 ALEServicePortType);
        if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
          RIO.HTTPWebNode.UseUTF8InHeader := True ;//解决中文乱码问题
        end else
          RIO.URL := Addr;
      finally
        if (Result = nil) and (HTTPRIO = nil) then
          RIO.Free;
      end;
    end;constructor   EmptyParms.Create; 
    begin 
        inherited   Create; 
        FSerializationOptions   :=   [xoLiteralParam]; 
    end; constructor Login.Create;
    begin
      inherited Create;
      FSerializationOptions := [xoLiteralParam];
    end;constructor LoginResult.Create;
    begin
      inherited Create;
      FSerializationOptions := [xoLiteralParam];
    end;destructor LoginResult.Destroy;
    begin
      if Assigned(FloginTime) then
        FloginTime.Free;
      inherited Destroy;
    end;initialization 
    RemClassRegistry.RegisterXSInfo(TypeInfo(GetALEID),   'urn:ale.logicalloy.com',   'GetALEID'); 
    RemClassRegistry.RegisterXSInfo(TypeInfo(GetALEIDResult),   'urn:ale.logicalloy.com',   'GetALEIDResult');
    RemClassRegistry.RegisterXSClass(Login, 'urn:ale.logicalloy.com', 'Login');
    RemClassRegistry.RegisterSerializeOptions(Login, [xoLiteralParam]);
    RemClassRegistry.RegisterXSClass(LoginResult, 'urn:ale.logicalloy.com', 'LoginResult');
    RemClassRegistry.RegisterSerializeOptions(LoginResult, [xoLiteralParam]);
      

  2.   

    沉的真快啊,有人知道吗?Help me
      

  3.   

    沉的真快啊,有人知道吗?Help   me
      

  4.   

    楼主做人要厚道,分没有人的积极性也就调不起来的。不过你要学的话,建议看看李唯的那本webservice的书,我再给你一个例子,留下邮箱。
      

  5.   

    SOAP 就是简单对象访问协议,处理复杂的类型不太好用
      

  6.   

    寒萧,你不是说给我发个例子吗?我怎么还没有收到。ideation_shang:你有这方面的例子吗?有的话就打发点咯